【文献】ZHOU, Minhua et al.,CE6-related: A Study of Primary Transforms,JVET-M0046 (version 1),ITU,2018年12月24日,pp.1-10,JVET-M0046-v1.docx
前記係数ブロックの前記サイズに基づいて、逆一次変換の逆水平変換および逆垂直変換の適用順序を決定するステップであって、前記逆一次変換は、前記係数ブロックの変換係数を中間ブロックの中間データに変換し、前記中間データを残余ブロックの残余データに変換するものである、ステップと、
前記第1順序において先に適用される前記逆垂直変換では、前記係数ブロックの前記変換係数を前記中間ブロックの前記中間データに変換し、前記中間ブロックの前記中間データの上位16行が計算されており、前記中間ブロックの残りの中間データがゼロであり、
前記第2順序において先に適用される前記逆水平変換では、前記係数ブロックの前記変換係数を前記中間ブロックの前記中間データに変換し、前記中間ブロックの前記中間データの左16列が計算されており、前記中間ブロックの残りの中間データがゼロであり、
順序において後に適用される前記逆水平変換及び前記第2順序において後に適用される前記逆垂直変換では、前記中間ブロックの前記中間データを前記残余ブロックの前記残余データに変換する、ステップと、
前記適用順序を決定するステップは、前記係数ブロックの前記サイズが32×64である場合、前記第2順序を用いると決定し、前記係数ブロックの前記サイズが32×64と異なる場合前記第1順序を用いると決定するステップを含む、請求項1に記載の方法。
前記適用順序を決定するステップは、前記係数ブロックの前記サイズがM×Nであり、高さNが幅Mよりも大きい場合、第2順序を用い、高さNが幅M以下である場合、第1順序を用いると決定するステップを含む、請求項1に記載の方法。
が32よりも大きい場合、前記適用順序を決定するステップにおいて決定された前記第1順序又は前記第2順序において、前記逆垂直変換及び前記逆水平変換を適用する、請求項1に記載の方法。
本明細書で提供される背景記述は、本開示の文脈を一般的に提示することを目的とする。この背景部分において記述される範囲で、本願において名前の記載がある発明者の研究、およびその他の点で出願時に先行技術として認められない明細書の態様は、本開示に対する先行技術として明示的にも暗黙的にも認められない。
ビデオ符号化および復号は、動き補償を用いたインター画像予測を使用して実行され得る。非圧縮デジタルビデオは、各画像が、例えば、1920×1080の輝度サンプルおよび関連するクロミナンスサンプルの空間次元を有する一連の画像を含み得る。この一連の画像は、例えば60画像/秒または60Hzの、固定または可変画像レート(非公式にはフレームレートとも呼ばれる)を有し得る。非圧縮ビデオは、相当数のビットレートを必要とする。例えば、サンプルあたり8ビットの1080p60、4:2:0ビデオ(60Hzのフレームレートで1920x1080の輝度サンプル解像度)の場合、1.5Gbit/sに近い帯域が必要となる。1時間分のそのようなビデオは、600GBytes超のストレージスペースを必要とする。
ビデオ符号化および復号の目的の1つは、圧縮による入力ビデオ信号の冗長性低減であり得る。圧縮は、前述の帯域幅またはストレージスペースの要求を、場合によっては2桁以上も削減することができる。可逆圧縮および非可逆圧縮の両方、またそれらの組み合わせを用いてもよい。可逆圧縮とは、圧縮された元の信号から、元の信号の正確なコピーを再構成する技術をいう。非可逆圧縮を用いた場合、再構成された信号は元の信号と同一ではないこともあるが、元の信号と再構成された信号との間の歪みは充分小さく、意図する用途に用いることができる。ビデオの場合、非可逆圧縮が広く使用されている。許容される歪みの量は、アプリケーションによって異なり、例えば、消費者向けの特定のストリーミングアプリケーションのユーザは、テレビ配信アプリケーションのユーザよりも高い歪みを許容する可能性がある。実現可能な圧縮率は、許容できる/許される歪みが大きいほど、より高い圧縮率になり得る。
ビデオ符号化技術は、イントラ符号化として知られる技術を含むことができる。イントラ符号化では、サンプル値は、以前に再構成された参照画像からのサンプルまたは他のデータを参照せずに表される。一部のビデオ符号化では、画像は、サンプルのブロックに空間的に分割される。サンプルの全てのブロックがイントラモードで符号化される場合、その画像はイントラ画像であり得る。イントラ画像および独立デコーダリフレッシュ画像などのその派生物は、デコーダの状態をリセットするために用いることができ、したがって符号化されたビデオビットストリームおよびビデオセッションの第1画像として、あるいは静止画像として用いることができる。イントラブロックのサンプルは変換に供することができ、変換係数はエントロピー符号化の前に量子化することができる。イントラ予測は、変換前領域のサンプル値を最小化する技術である場合がある。場合によっては、変換後のDC値が小さく、かつAC係数が小さいほど、エントロピー符号化後のブロックを表すために所与の量子化ステップサイズで必要とされるビットが少なくなる。
例えばMPEG-2世代の符号化技術から知られているような従来のイントラ符号化は、イントラ予測を用いない。しかし、一部の新たなビデオ圧縮技術は、例えば、周囲サンプルデータ、及び/又は空間的に隣接し復号順で先行するデータのブロックの符号化/復号中に取得されたメタデータから試みる技術を含む。このような技術は、以降「イントラ予測」技術と呼ばれる。少なくとも一部のケースでは、イントラ予測は再構成中の現在の画像からの参照データのみを使用し、参照画像からのものは使用しないことに留意されたい。
イントラ予測には様々な形式があり得る。そのような技術の1つ以上を所与のビデオ符号化テクノロジーで用いることができる場合、その用いる技術を、イントラ予測モードで符号化することができる。場合によっては、モードはサブモード及び/又はパラメータを有することができ、これらを個別に符号化することも、モードコードワードに含めることもできる。所与のモード/サブモード/パラメータの組み合わせにどのコードワードを用いるかは、イントラ予測による符号化効率利得に影響を及ぼす場合があり、コードワードをビットストリームに変換するために用いられるエントロピー符号化技術もまた同様である。
イントラ予測の特定のモードはH.264で導入され、H.265で改善され、共同探索モデル(JEM)、多用途ビデオ符号化(VVC)、ベンチマークセット(BMS)などの新しい符号化技術においてさらに洗練された。予測子ブロックは、既に利用可能なサンプルに属する隣接サンプル値を用いて形成することができる。隣接サンプルのサンプル値は、ある方向に従って予測子ブロックにコピーされる。用いられる方向への参照はビットストリーム内で符号化することも、それ自体を予測することもできる。
イントラ画像予測は、通知された予測方向によって適切なように隣接サンプルから参照サンプル値をコピーすることによって機能する。例えば、符号化されたビデオビットストリームが、このブロックについて、矢印102と一貫性のある予測方向を示す通知を含むと仮定する、即ち、サンプルは、予測サンプルから右上へ、水平から45度の角度で予測される。その場合、サンプルS41,S32,S23およびS14は、同じ参照サンプルR05から予測される。次に、サンプルS44が参照サンプルR08から予測される。
ビデオ符号化技術が発展するにつれて、可能な方向の数は増えてきた。H.264(2003年)では、9つの異なる方向を表すことができた。この方向は、H.265(2013年)では33に増加し、JEM/VVC/BMSでは、開示時点で最大65方向をサポートすることができる。実験は最も可能性の高い方向を識別するように行われ、エントロピー符号化の特定の技術は、この可能性のある方向を少数のビットで表すために用いられ、可能性の低い方向に対する特定のペナルティを受け入れる。さらに方向自体を、隣接する既に復号されたブロックで用いられる隣接方向から予測できる場合がある。
方向を表す符号化されたビデオビットストリームにおけるイントラ予測方向ビットのマッピングは、ビデオ符号化技術ごとに異なる場合があり、予測方向の単純な直接マッピングからイントラ予測モード、コードワード、最も可能性の高いモードを含む複雑な適応方式、および同様の技術にまで及び得る。しかし全ての場合において、特定の他の方向よりもビデオコンテンツで統計的に発生する可能性が低い特定の方向が存在する場合がある。ビデオ圧縮の目標は冗長性の削減であるが、この可能性の低い方向は、適切に機能するビデオ符号化技術では、可能性の高い方向よりも多いビット数で表される。
ビデオの符号化および復号を、動き補償付きのインター画像予測を用いて実行することができる。動き補償は、1つの非可逆圧縮技術であり得、また、以前に再構成された画像またはその一部(参照画像)からのサンプルデータのブロックが、動きベクトル(以降、MV)によって示される方向に空間的にシフトされた後、新たに再構成される画像または画像部分の予測のために用いられる技術に関連し得る。場合によっては、参照画像は、現在再構成中の画像と同じであり得る。MVは、2つの次元XとYを有するか、または3つの次元を有してもよく、第3の次元は使用中の参照画像の表示である(後者は、間接的には、時間次元であり得る)。
一部のビデオ圧縮技術において、サンプルデータの特定の領域に適用可能なMVは、他のMV、例えば再構成中の領域に空間的に隣接し、復号の順においてそのMVに先行するサンプルデータの別の領域に関連するMVから予測することができる。そうすることにより、MVの符号化に必要なデータ量を大幅に減らし、これにより冗長性を除去し、圧縮率を高めることができる。MV予測が効果的に機能するのは、例えば、カメラから得られる入力ビデオ信号(自然ビデオとして知られている)を符号化する場合、1つのMVが適用できる領域よりも大きな領域は類似の方向に動くという統計的な可能性があり、したがって、場合によっては、隣接する領域のMVから導出される類似の動きベクトルを用いて予測することができるためである。その結果、ある特定の領域に対するMVは、周辺のMVから予測されるMVに類似するか、同じであるということが判明し、エントロピー符号化の後、MVを直接に符号化した場合に用いられるよりも少ないビット数で表現することができるようになる。MV予測は、元の信号(すなわちサンプルストリーム)から得られる信号(すなわちMV)の可逆圧縮の一例である場合がある。MV予測自体が、例えば、周囲の複数のMVから予測変数を計算する際の丸め誤差により、非可逆性である場合もある。
様々なMV予測メカニズムがH.265/HEVC(ITU-T Rec. H.265, 「高効率ビデオ符号化」、2016年12月)に記載されている。H.265が提供する多くのMV予測メカニズムのうち、本願においては、以降「空間マージ」と呼ぶ技術について述べる。
本開示の態様は、ビデオ符号化/復号用の方法と装置を提供する。一部の例では、ビデオ復号用の装置は、処理回路を含む。処理回路は、符号化されたビデオビットストリームから係数ブロックの符号化情報を復号することができる。符号化情報は、係数ブロックのサイズを示すことができる。処理回路は、係数ブロックのサイズに基づいて、残余ブロックの残余データを取得するために逆一次変換の逆水平変換および逆垂直変換を係数ブロックの変換係数に対して実行する順序を決定することができる。係数ブロックのサイズが条件を満たす場合、逆垂直変換を、逆水平変換を係数ブロックの変換係数に対して実行してから実行する。処理回路は、残余データに基づいて残余ブロック内のサンプルを再構成することができる。一例では、条件は、係数ブロックのサイズが32×64であることである。一例では、条件は、M×Nの係数ブロックの高さNが係数ブロックの幅Mよりも大きいことである。一例では、係数ブロックのサイズはM×Nであり、MとNは正の整数である。残余ブロックのm×n領域の第1残余データは、逆一次変換によって計算され、残余ブロックのm×n領域外の第2残余データは、逆一次変換によって計算されず、mはM以下であり、nはN以下である。条件は、比m/Mが比n/N以上であることである。
本開示の態様は、ビデオ符号化/復号用の方法と装置を提供する。一部の例では、ビデオ復号用の装置は処理回路を含む。処理回路は、符号化されたビデオビットストリームから係数ブロックの符号化情報を復号することができる。符号化情報は、係数ブロックのサイズを示すことができる。処理回路は、係数ブロックのサイズに基づいて、逆一次変換の逆水平変換および逆垂直変換のうちの1つにおいて計算回数を削減するか否かを判定することができる。逆垂直変換は、係数ブロックの変換係数を中間ブロックの中間データに変換することができ、逆水平変換は、中間データを残余ブロックの残余データに変換することができる。処理回路は、逆一次変換を実行することができる。逆垂直変換の計算回数を削減すると判定した場合、中間ブロックの中間データの上位16行が逆垂直変換によって計算され、中間ブロックの残りの中間データはゼロになる。逆水平変換の計算回数を削減すると判定した場合、残余ブロックの残余データの左16列が逆水平変換によって計算され、残余ブロックの残りの残余データはゼロになる。処理回路は、残余データに基づいて残余ブロックのサンプルを再構成することができる。
一実施形態では、係数ブロックのサイズは、32×64である。逆水平変換および逆垂直変換のうちの1つは、逆垂直変換である。処理回路は、係数ブロックのサイズが32×64である場合、逆垂直変換の計算回数を削減すると判定することができる。処理回路は、逆一次変換を実行することができ、中間ブロックの中間データの上位16行を逆垂直変換によって計算することができ、中間ブロックの残りの中間データはゼロになる。
一実施形態では、係数ブロックのサイズは、32×64である。逆水平変換および逆垂直変換のうちの1つは、逆水平変換である。処理回路は、係数ブロックのサイズが32×64である場合、逆水平変換の計算回数を削減すると判定することができる。処理回路は、逆一次変換を実行することができ、残余ブロックの残余データの左16列を逆水平変換によって計算することができ、残余ブロックの残りの残余データはゼロになる。
一実施形態では、係数ブロックのサイズは、32×32である。逆水平変換および逆垂直変換のうちの1つは、逆水平変換である。処理回路は、係数ブロックのサイズが32×32である場合、逆水平変換の計算回数を削減すると判定することができる。処理回路は、逆一次変換を実行することができ、残余ブロックの残余データの左16列を逆水平変換によって計算することができ、残余ブロックの残りの残余データはゼロになり、中間ブロックの中間データを逆垂直変換によって計算することができる。
一実施形態では、係数ブロックのサイズは、32×32である。逆水平変換および逆垂直変換のうちの1つは、逆垂直変換である。処理回路は、係数ブロックのサイズが32×32である場合、逆垂直変換の計算回数を削減すると判定することができる。処理回路は、逆一次変換を実行することができ、中間ブロックの中間データの上位16行を逆垂直変換によって計算することができ、中間ブロックの残りの中間データはゼロになり、残余ブロックの残余データを逆水平変換によって計算することができる。
別の例において、通信システム300は、例えばビデオ会議中に発生し得る符号化されたビデオデータの双方向伝送を行う第2の対の端末装置330および340を含む。一例において、端末装置330および340の各端末装置は、データの双方向伝送のために、ネットワーク350を介して端末装置330および340のうちの他方の端末装置に送信するためにビデオデータ(例えば、端末装置によってキャプチャされたビデオ画像のストリーム)を符号化してもよい。また、端末装置330および340の各端末装置は、端末装置330および340の他の端末装置から送信された符号化されたビデオデータを受信し、符号化されたビデオデータを復号してビデオ画像を復元し、復元されたビデオデータに従ってアクセス可能な表示装置にビデオ画像を表示してもよい。
なお、電子デバイス420および430は、他の構成要素(図示せず)を含んでもよい。例えば、電子デバイス420は、ビデオデコーダ(図示せず)を含んでよく、同様に電子デバイス430は、ビデオエンコーダ(図示せず)を含んでもよい。
受信機531は、ビデオデコーダ510によって復号される1つまたは複数の符号化されたビデオシーケンスを受信してもよく、同じまたは別の実施形態においては、各符号化されたビデオシーケンスの復号が他の符号化されたビデオシーケンスから独立している場合、一度に1つの符号化されたビデオシーケンスを受信してもよい。符号化されたビデオシーケンスは、チャネル501から受信されてもよく、このチャネルは、エンコードされたビデオデータを記憶する記憶装置へのハードウェア/ソフトウェアリンクであってもよい。受信機531は、エンコードされたビデオデータを、他のデータ、例えば、符号化された音声データ及び/又は補助的なデータストリームとともに受信してもよく、それらは、それぞれを利用するエンティティ(図示せず)に転送されてもよい。受信機531は、符号化されたビデオシーケンスを他のデータから分離してもよい。ネットワークジッターに対処するために、バッファメモリ515が、受信機531とエントロピーデコーダ/パーサ520(以下、「パーサ520」)との間に接続されてもよい。特定のアプリケーションにおいて、バッファメモリ515は、ビデオデコーダ510の一部である。別のアプリケーションにおいて、それはビデオデコーダ510の外部にあってもよい(図示せず)。さらに他のアプリケーションにおいて、例えばネットワークジッターに対処するために、ビデオデコーダ510の外部にバッファメモリ(図示せず)があってもよく、さらに、例えばプレイアウトのタイミングに対処するために、ビデオデコーダ510の内部に別のバッファメモリ515があってもよい。受信機531が、十分な帯域幅と制御性を有するストア/転送デバイスから、または等時性ネットワークからデータを受信している場合には、バッファメモリ515は必要がないか、あるいは小さくてもよい。インターネットのようなベストエフォート型のパケットネットワークにおいて使用する場合、バッファメモリ515が必要とされることがあり、比較的大型であってもよく、適応的なサイズであれば有利であり、また、少なくとも部分的に、ビデオデコーダ510の外部のオペレーティングシステムまたは同様の要素(図示せず)において実行されてもよい。
シンボル521の再構成には、符号化されたビデオ画像またはその一部のタイプ(例えば、インターおよびイントラ画像、インターおよびイントラブロック)などの要素に従って、複数の異なるユニットが関与してもよい。いずれのユニットが、どのように関与するかは、パーサ520によって符号化されたビデオシーケンスから構文解析されたサブグループ制御情報によって制御されてもよい。パーサ520と以下の複数のユニットとの間のこのようなサブグループ制御情報の流れは、煩雑さを避けるために、描かれていない。
ビデオデコーダ510は、既に述べた機能ブロック以外にも、以下に説明するように概念的に複数の機能ユニットに分割されてもよい。商業的な制約の下で動作する実用的な実施において、これらのユニットの多くは互いに密接に作用し、少なくとも部分的に相互に組み込まれてもよい。しかしながら、開示された主題を説明するためには、以下の機能ユニットに概念的に分割することが適切である。
第1のユニットは、スケーラ/逆変換ユニット551である。スケーラ/逆変換ユニット551は、量子化された変換係数に加えて、いずれの変換を使用するか、ブロックサイズ、量子化係数、量子化スケーリングマトリクスなどの制御情報を、シンボル521としてパーサ520から受信する。スケーラ/逆変換ユニット551は、アグリゲータ555に入力され得るサンプル値を含むブロックを出力してもよい。
スケーラ/逆変換部551の出力サンプルは、イントラ符号化されたブロック、すなわち、以前に再構成された画像からの予測情報を使用していないが、現在の画像に先行して再構成された部分からの予測情報を使用し得るブロックに関連している場合がある。このような予測情報は、イントラ画像予測ユニット552によって提供されてもよい。イントラ画像予測ユニット552が、現在の画像バッファ558からフェッチされた、既に再構成された周囲の情報を使用して、再構成中のブロックと同じサイズおよび形状のブロックを生成する場合がある。現在の画像バッファ558は、例えば、部分的に再構成された現在の画像及び/又は完全に再構成された現在の画像をバッファリングする。アグリゲータ555は、場合によっては、イントラ予測ユニット552が生成した予測情報を、サンプルごとに、スケーラ/逆変換ユニット551が提供する出力サンプル情報に追加する。
また、スケーラ/逆変換ユニット551の出力サンプルが、インター符号化された、また場合によっては動き補償されたブロックに関連する場合もある。このような場合、動き補償予測ユニット553は、参照画像メモリ557にアクセスして、予測に使用されるサンプルをフェッチしてもよい。ブロックに関連するシンボル521に従ってフェッチされたサンプルを動き補償した後、これらのサンプルは、アグリゲータ555によって、スケーラ/逆変換ユニット551の出力(この場合、残余サンプルまたは残余信号と呼ぶ)に追加され、出力サンプル情報を生成してもよい。動き補償予測ユニット553が予測サンプルをフェッチする参照画像メモリ557内のアドレスは、例えばX、Y、および参照画像成分を有し得るシンボル521の形態で動き補償予測ユニット553に利用可能な動きベクトルによって制御されてもよい。また動き補償は、サブサンプルまで精度が保証された動きベクトルが使用されているとき、参照画像メモリ557からフェッチされたサンプル値の補間、および動きベクトル予測メカニズムなどを含んでもよい。
アグリゲータ555の出力サンプルは、ループフィルタユニット556において、様々なループフィルタリング技術にかけられてもよい。ビデオ圧縮技術は、符号化されたビデオシーケンス(符号化されたビデオビットストリームとも呼ぶ)に含まれるパラメータによって制御され、パーサ520からシンボル521としてループフィルタユニット556が利用することのできるループ内フィルタ技術を含んでもよいが、符号化された画像または符号化されたビデオシーケンスの(復号順において)先行する部分の復号時に得られるメタ情報に応答してもよく、また、先行して再構成され、ループフィルタリングされたサンプル値に応答してもよい。
ループフィルタユニット556の出力は、レンダリングデバイス512に出力されてもよく、また将来のインター画像予測に使用するために参照画像メモリ557に保存され得るサンプルストリームであってもよい。
特定の符号化された画像は、一度完全に再構成されると、将来の予測のための参照画像として使用されてもよい。例えば、現在の画像に対応する符号化された画像が完全に再構成され、その符号化された画像が(例えばパーサ520によって)参照画像として識別されると、現在の画像バッファ558は参照画像メモリ557の一部となってもよく、次の符号化された画像の再構成を開始する前に、新たな現在の画像バッファが再割り当てされてもよい。
符号化されたビデオシーケンスは、符号化されたビデオシーケンスが、ビデオ圧縮技術または規格のシンタックスと、ビデオ圧縮技術または規格で文書化されたプロファイルとの両方を厳守するという意味で、使用されているビデオ圧縮技術または規格により指定されたシンタックスに準拠してもよい。具体的には、プロファイルは、ビデオ圧縮技術または規格で利用可能なすべてのツールの中から、特定のツールをそのプロファイルで利用可能な唯一のツールとして選択してもよい。また、規格に準拠するためには、符号化されたビデオシーケンスの計算量が、ビデオ圧縮技術または規格のレベルによって定義された範囲内であることが要求される。レベルにより、最大画像サイズ、最大フレームレート、最大再構成サンプルレート(例えば、メガサンプル/秒として測定)、最大参照画像サイズなどが制限される場合がある。レベルによって設定された制限は、場合によっては、仮想参照デコーダ(HRD)仕様および符号化されたシーケンスで伝達されたHRDバッファ管理のためのメタデータによりさらに制限されることがある。
一実施形態において、受信機531は、エンコードされたビデオを有する追加の(冗長な)データを受信してもよい。この追加データは、符号化されたビデオシーケンスの一部として含まれてもよい。この追加データは、データを適切に復号するため、及び/又は元のビデオデータをより正確に再構成するために、ビデオデコーダ510によって使用されてもよい。追加データは、例えば、時間的、空間的、または信号雑音比(SNR)強化層、冗長スライス、冗長画像、順方向誤り訂正コードなどの形態であってもよい。
ビデオソース601は、ビデオエンコーダ603によって符号化されるソースビデオシーケンスを、任意の適切なビット深度(例えば、8ビット、10ビット、12ビット、など)、任意の色空間(例えば、BT.601 Y CrCB、RGB、など)、および任意の適切なサンプリング構造(例えば、Y CrCb 4:2:0、Y CrCb 4:4:4)を有し得るデジタルビデオサンプルストリームの形態で提供してもよい。メディアサービングシステムにおいて、ビデオソース601は、以前に作成されたビデオを保存する記憶装置であってもよい。ビデオ会議システムにおいて、ビデオソース601は、ローカル画像情報をビデオシーケンスとしてキャプチャするカメラであってもよい。ビデオデータは、連続して見たとき、動きを付与する複数の個々の画像として提供されてもよい。画像自体は、画素の空間アレイとして編成されてもよく、各画素は、使用時のサンプリング構造、色空間などに依存して、1つまたは複数のサンプルを含んでもよい。当業者であれば、画素とサンプルとの関係を容易に理解することができる。以下の記述において、サンプルを中心に説明する。
一実施形態によれば、ビデオエンコーダ603は、ソースビデオシーケンスの画像を符号化し、リアルタイムで、またはアプリケーションが要求する他の時間制約の下で、符号化されたビデオシーケンス643に圧縮してもよい。適切な符号化速度を課することは、コントローラ650の1つの機能である。一部の実施形態において、コントローラ650は、以下に述べるとおり他の機能ユニットを制御し、他の機能ユニットに機能的に接続されている。この接続は、煩雑さを避けるために、描かれていない。コントローラ650によって設定されるパラメータは、レート制御関連パラメータ(画像スキップ、量子化器、レート歪み最適化技術のラムダ値、など)、画像サイズ、画像群(GOP)レイアウト、最大動きベクトルサーチ範囲などを含んでもよい。コントローラ650は、あるシステム設計に最適化されたビデオエンコーダ603に関連する他の適切な機能を有するように構成されてもよい。
一部の実施形態において、ビデオエンコーダ603は、符号化ループで動作するように構成されている。極端に簡略化して述べれば、一例として、符号化ループは、ソースコーダ630(例えば、符号化される入力画像と参照画像とに基づいて、シンボルストリームなどのシンボルを作成する機能を果たす)と、ビデオエンコーダ603に組み込まれた(ローカル)デコーダ633とを含んでもよい。デコーダ633は、(リモート)デコーダが作成するのと同様の方法で、サンプルデータを作成するためにシンボルを再構成する(これは、開示された主題で扱われているビデオ圧縮技術においては、シンボルと符号化されたビデオビットストリームとの間のいかなる圧縮も、可逆的であるためである)。再構成されたサンプルストリーム(サンプルデータ)は、参照画像メモリ634に入力される。シンボルストリームの復号は、デコーダの位置(ローカルまたはリモート)に依存しないビットパーフェクトな結果をもたらすため、参照画像メモリ634内のコンテンツも、ローカルエンコーダとリモートエンコーダとの間でビットパーフェクトである。換言すれば、エンコーダの予測部分は、デコーダが復号時に予測を用いるときに「見る」のと全く同一のサンプル値を、参照画像サンプルとして「見る」。この参照画像の同期性(および、例えばチャンネルエラーなどで同期性が維持できない場合は、結果的に発生するドリフト)の基本原理は、一部の関連技術においても用いられる。
この時点で言えることは、デコーダに存在する構文解析/エントロピー復号を除く任意のデコーダ技術は、必然的に、対応するエンコーダにおいても、実質的に同一の機能形態で存在するということである。このため、開示された主題は、デコーダの演算に焦点を当てている。デコーダ技術の説明は、包括的に説明されるエンコーダ技術の逆であるため、簡略化することができる。特定の領域においてのみ、より詳細な説明が必要であり、それに関して以下に述べる。
動作時、一部の例において、ソースコーダ630は、「参照画像」として指定されたビデオシーケンスから、以前に符号化された1つ以上の画像を参照して入力画像を予測的に符号化する、動き補償された予測符号化を実行してもよい。このようにして、符号化エンジン632は、入力画像の画素ブロックと、入力画像に対する予測参照として選択され得る参照画像の画素ブロックとの間の差分を符号化する。
予測器635は、符号化エンジン632のために予測検索を行ってもよい。すなわち、新規の画像を符号化するため、予測器635は、新規の画像のための適切な予測参照として機能することができるサンプルデータ(候補参照画素ブロックとして)、または参照画像動きベクトル、ブロック形状などの特定のメタデータを参照画像メモリ634内で検索してもよい。予測器635は、適切な予測参照を求めるために、サンプルブロック、画素ブロック単位で動作してもよい。場合によっては、予測器635によって得られた検索結果によって決定されることであるが、入力画像は、参照画像メモリ634に保存された複数の参照画像から予測参照を引き出させてもよい。
コントローラ650は、例えば、ビデオデータをエンコードするのに用いられるパラメータおよびサブグループパラメータの設定などを含む、ソースコーダ630の符号化演算を管理してもよい。
前述のすべての機能ユニットの出力には、エントロピーコーダ645においてエントロピー符号化を施してもよい。エントロピーコーダ645は、ハフマン符号化、可変長符号化、算術符号化などの技術に従ってシンボルを可逆圧縮することにより、様々な機能ユニットによって生成されたシンボルを符号化されたビデオシーケンスに変換する。
送信機640は、エントロピーコーダ645によって作成されたような符号化されたビデオシーケンスをバッファリングして、エンコードされたビデオデータを保存することになる記憶装置へのハードウェア/ソフトウェアリンクであり得る通信チャネル660を介した送信の準備をしてもよい。送信機640は、ビデオエンコーダ603からの符号化されたビデオデータを、例えば、符号化された音声データ及び/又は補助データストリーム(ソースは図示せず)などの、送信される他のデータと統合してもよい。
コントローラ650は、ビデオエンコーダ603の演算を管理してもよい。符号化時、コントローラ650は、各符号化された画像に、それぞれの画像に適用され得る符号化技術に影響を与える可能性がある特定の符号化された画像タイプを割り当ててもよい。例えば、画像は以下の画像タイプの1つとして割り当てられてもよいことが多い。
その1つがイントラ画像(I画像)であり、これはシーケンスにおける他の画像を予測源として使用せずに符号化および復号することができる。ビデオ符号化によっては、例えば独立デコーダリフレッシュ(「IDR」)画像を含む、異なるタイプのイントラ画像に対応できるものもある。当業者には、それらのI画像の変種ならびにそれぞれの用途および特徴は知られている。
予測画像(P画像)は、各ブロックのサンプル値を予測するために、最大1つの動きベクトルおよび参照インデックスを使用し、イントラ予測またはインター予測を用いて符号化および復号され得るものであってもよい。
双方向予測画像(B画像)は、各ブロックのサンプル値を予測するために、最大2つの動きベクトルおよび参照インデックスを使用し、イントラ予測またはインター予測を用いて符号化および復号され得るものであってもよい。同様に、マルチ予測画像は、単一のブロックの再構成に3つ以上の参照画像および関連するメタデータを用いることができる。
ソース画像は一般的に、空間的に複数のサンプルブロック(例えば、それぞれ4×4、8×8、4×8、または16×16のサンプルのブロック)に分割され、ブロックごとに符号化されてもよい。ブロックは、ブロックのそれぞれの画像に適用される符号化割り当てによって決定される、他の(すでに符号化された)ブロックを参照して予測的に符号化されてもよい。例えば、I画像のブロックは、非予測的に符号化されてもよいし、同じ画像の既に符号化されたブロックを参照して予測的に符号化されてもよい(空間予測またはイントラ予測)。P画像の画素ブロックは、以前に符号化された1つの参照画像を参照して、空間的予測または時間的予測によって予測的に符号化されてもよい。B画像のブロックは、以前に符号化された1つまたは2つの参照画像を参照して、空間的予測または時間的予測によって予測的に符号化されてもよい。
ビデオデエンコーダ603は、所定のビデオ符号化技術またはITU-T Rec.H.265などの規格に従って符号化演算を実行してもよい。その演算において、ビデオエンコーダ603は、入力ビデオシーケンスの時間的および空間的な冗長性を利用する予測符号化演算を含む様々な圧縮演算を行ってもよい。したがって、符号化されたビデオデータは、使用されているビデオ符号化技術または規格によって指定されたシンタックスに準拠してもよい。
一実施形態において、送信機640は、エンコードされたビデオを有する追加のデータを送信してもよい。ソースコーダ630は、そのようなデータを、符号化されたビデオシーケンスの一部として含んでもよい。追加データは、時間/空間/SNR強化層、冗長画像やスライスなどの他の形態の冗長データ、SEIメッセージ、VUIパラメータセットフラグメントなどを含んでもよい。
ビデオは、時間的に連続した複数のソース画像(ビデオ画像)としてキャプチャされてもよい。イントラ画像予測(イントラ予測と略されることが多い)は、所与の画像の空間的な相関関係を利用し、インター画像予測は画像間の(時間的またはその他の)相関関係を利用する。一例として、現在の画像と呼ぶ符号化/復号中の特定の画像は、ブロックに分割されている。現在の画像内のブロックが、ビデオの、以前に符号化され、まだバッファリングされている参照画像内の参照ブロックに類似する場合、現在の画像内のブロックは、動きベクトルと呼ばれるベクトルによって符号化することができる。動きベクトルは、参照画像内の参照ブロックを指し、複数の参照画像が使用されている場合は、参照画像を識別する第3の次元を有してもよい。
一部の実施形態において、インター画像予測に双予測技術を用いてもよい。双予測技術によれば、ビデオ内の現在の画像に復号の順序において先行する(ただし、表示順ではそれぞれ過去と未来にあってもよい)第1の参照画像および第2の参照画像などの2つの参照画像が用いられる。現在の画像内のブロックは、第1の参照画像内の第1の参照ブロックを指す第1の動きベクトルと、第2の参照画像内の第2の参照ブロックを指す第2の動きベクトルとによって符号化されてもよい。ブロックは、第1の参照ブロックと第2の参照ブロックとの組み合わせによって予測されてもよい。
本開示の一部の実施形態によれば、インター画像予測およびイントラ画像予測などの予測は、ブロック単位で実行される。例えば、HEVC規格によれば、一連のビデオ画像内の1つの画像は、圧縮のために符号化ツリーユニット(CTU)に分割され、一画像内のCTUは、64×64画素、32×32画素、または16×16画素などの同じサイズを有する。一般的に、1つのCTUは、1つのルーマCTBおよび2つのクロマCTBである3つの符号化ツリーブロック(CTB)を含む。各CTUは、再帰的に1つまたは複数の符号化ユニット(CU)にクワッドツリー分割することができる。例えば、64×64画素のCTUは、64×64画素の1つのCU、または32×32画素の4つのCU、または16×16画素の16個のCUに分割することができる。一例において、各CUが分析され、インター予測タイプやイントラ予測タイプなど、CUの予測タイプが決定される。CUは、時間的及び/又は空間的な予測可能性に従って、1つまたは複数の予測ユニット(PU)に分割される。一般的に、各PUは、1つのルーマ予測ブロック(PB)と、2つのクロマPBとを含む。一実施形態において、符号化(符号化/復号)における予測演算は、予測ブロックの単位で実行される。予測ブロックの一例として、ルーマ予測ブロックを用いると、予測ブロックは、8×8画素、16×16画素、8×16画素、16×8画素などの、画素に対する値(例えば、ルーマ値)のマトリクスを含む。
HEVCの例において、ビデオエンコーダ703は、8×8サンプルの予測ブロックなどの処理ブロックに対するサンプル値のマトリクスを受信する。ビデオエンコーダ703は、処理ブロックがイントラモード、インターモード、または双予測モードを用いて最適に符号化されているか否かを、例えばレート歪み最適化処理を用いて判断する。処理ブロックがイントラモードで符号化される場合、ビデオエンコーダ703は、イントラ予測技術を用いて処理ブロックを符号化された画像にエンコードしてもよく、処理ブロックがインターモードまたは双予測モードで符号化される場合、ビデオエンコーダ703は、それぞれ、インター予測または双予測技術を用いて、処理ブロックを符号化された画像にエンコードしてもよい。特定のビデオ符号化技術において、マージモードは、動きベクトルが、予測器の範囲外にある符号化された動きベクトル成分の恩恵を受けずに、1つまたは複数の動きベクトル予測変数から導出されるインター画像予測サブモードであってもよい。他の特定のビデオ符号化技術においては、当該ブロックに適用可能な動きベクトル成分が存在してもよい。一例において、ビデオエンコーダ703は、処理ブロックのモードを決定するモード決定モジュール(図示せず)などの他の構成要素を含む。
インターエンコーダ730は、現在のブロック(例えば、処理ブロック)のサンプルを受信し、ブロックを参照画像内の1つまたは複数の参照ブロック(例えば、先行する画像および後続の画像内のブロック)と比較し、インター予測情報(例えば、インター符号化技術による冗長情報の記述、動きベクトル、マージモード情報)を生成し、任意の適切な技術を用いて、インター予測情報に基づきインター予測結果(例えば、予測ブロック)を計算するように構成されている。一部の例において、参照画像は、エンコードされたビデオ情報に基づいて復号される復号された参照画像である。
イントラエンコーダ722は、現在のブロック(例えば、処理ブロック)のサンプルを受信し、場合によってはブロックを同じ画像において既に符号化されたブロックと比較し、変換後の量子化係数を生成し、場合によってはイントラ予測情報(例えば、1つまたは複数のイントラ符号化技術によるイントラ予測方向情報)も生成するように構成されている。一例において、イントラエンコーダ722は、イントラ予測情報と同一画像内の参照ブロックとに基づいて、イントラ予測結果(例えば、予測ブロック)も計算する。
汎用コントローラ721は、汎用制御データを決定し、汎用制御データに基づいてビデオエンコーダ703の他の構成要素を制御するように構成されている。一例において、汎用コントローラ721は、ブロックのモードを決定し、当該モードに基づいてスイッチ726に制御信号を提供する。例えば、モードがイントラモードである場合、汎用コントローラ721は、スイッチ726を制御して、残余計算機723が使用するイントラモードの結果を選択し、エントロピーエンコーダ725を制御して、イントラ予測情報を選択し、かつビットストリームにイントラ予測情報を含め、モードがインターモードである場合、汎用コントローラ721は、スイッチ726を制御して、残余計算機723が使用するインター予測結果を選択し、エントロピーエンコーダ725を制御して、インター予測情報を選択し、ビットストリームにインター予測情報を含める。
残余計算機723は、受信したブロックと、イントラエンコーダ722またはインターエンコーダ730から選択された予測結果との間の差分(残余データ)を計算するように構成されている。残余エンコーダ724は、残余データに基づいて演算を実行し、残余データをエンコードして変換係数を生成するように構成されている。一例において、残余エンコーダ724は、残余データを空間領域から周波数領域に変換して、変換係数を生成するように構成されている。次に、変換係数が量子化処理を受けて、量子化された変換係数が得られる。また、様々な実施形態において、ビデオエンコーダ703は、残余デコーダ728を含む。残余デコーダ728は、逆変換を行い、復号された残余データを生成するように構成されている。復号された残余データは、イントラエンコーダ722およびインターエンコーダ730で好適に使用されてもよい。例えば、インターエンコーダ730は、復号された残余データおよびインター予測情報に基づいて復号されたブロックを生成し、イントラエンコーダ722は、復号された残余データおよびイントラ予測情報に基づいて復号されたブロックを生成することができる。復号されたブロックは好適に処理されて復号された画像を生成し、復号された画像はメモリ回路(図示せず)にバッファリングされ、一部の例において参照画像として用いられてもよい。
エントロピーエンコーダ725は、エンコードされたブロックを含むようにビットストリームをフォーマットするように構成されている。エントロピーエンコーダ725は、HEVC規格などの適切な規格に従って、さまざまな情報を含むように構成されている。一例において、エントロピーエンコーダ725は、汎用制御データ、選択された予測情報(例えば、イントラ予測情報またはインター予測情報)、残余情報、およびその他の適切な情報をビットストリームに含むように構成されている。なお、開示された主題によれば、インターモードまたは双予測モードのいずれかのマージサブモードでブロックを符号化する場合、残余情報は存在しない。
エントロピーデコーダ871は、符号化された画像から、符号化された画像を構成するシンタックス要素を表す特定のシンボルを再構成するように構成されてもよい。そのようなシンボルは、例えば、ブロックが符号化されるモード(例えば、イントラモード、インターモード、双予測モード、およびマージサブモードまたは別のサブモードにおける後者2つ)、特定のサンプルを識別することができる予測情報(例えば、イントラ予測情報またはインター予測情報など)またはそれぞれイントラデコーダ872またはインターデコーダ880によって予測に使用されるメタデータ、例えば量子化された変換係数などの形態の残余情報、などを含むことができる。一例として、予測モードがインター予測モードまたは双予測モードである場合、インター予測情報がインターデコーダ880に提供され、予測タイプがイントラ予測タイプである場合、イントラ予測情報はイントラデコーダ872に提供される。残余情報は、逆量子化処理を受けてもよく、残余デコーダ873に提供される。
残余デコーダ873は、逆量子化を実行して、非量子化された変換係数を抽出し、非量子化された変換係数を処理して、周波数領域から空間領域に残余を変換するように構成される。また、残余デコーダ873は、特定の制御情報(量子化器パラメータ(QP)を含むように)を必要としてもよく、その情報は、エントロピーデコーダ871によって提供されてもよい(データパスは、これが低容量の制御情報のみである可能性があるため、描かれていない)。
再構成モジュール874は、空間領域において、残余デコーダ873によって出力された残余と、予測結果(場合により、インターまたはイントラ予測モジュールによって出力されたもの)とを組み合わせて、再構成ブロックを形成するように構成されており、このブロックは、再構成画像の一部であってもよく、この再構成画像は再構成ビデオの一部であってもよい。なお、視覚的品質を向上させるために、デブロッキング演算などの他の適切な演算を実行してもよい。
なお、ビデオエンコーダ403、603、703、およびビデオデコーダ410、510、810は、任意の適切な技術を用いて動作させることができる。一実施形態において、ビデオエンコーダ403、603、703、およびビデオデコーダ410、510、810は、1つまたは複数の集積回路を用いて動作させることができる。別の実施形態において、ビデオエンコーダ403、603、703、およびビデオデコーダ410、510、810は、ソフトウェア命令を実行する1つまたは複数のプロセッサを用いて動作させることができる。
HEVCなどの一部の実施形態では、一次変換は、4点、8点、16点および32点の離散コサイン変換(DCT)タイプ2(DCT-2)を含んでもよく、変換コア行列は、8ビット整数(即ち、8ビット変換コア)を用いて表されてもよい。付録Iに示すように、より小さいDCT-2の変換コア行列は、より大きいDCT-2の変換コア行列の一部である。
DCT-2コア行列は、対称性/反対称性特徴を示す。したがって、「部分バタフライ」実装は、演算カウント(例えば、乗算、加算、減算、シフト、および/または同様のものなど)の数を低減するようにサポートされ、部分バタフライを用いて、行列乗算の同一の結果を得ることができる。
VVCなどの一部の実施形態では、上記の4点、8点、16点および32点DCT-2変換に加えて、追加の2点および64点DCT-2もまた含まれる場合がある。VVCで用いられるような64点DCT-2コアの例を、付録IIに64×64行列として示す。
HEVCで用いられるようなDCT-2および4×4DST-7に加えて、適応多重変換(AMT)(拡張多重変換(EMT)または多重変換選択(MTS)とも呼ばれる)方式を、例えばVVCにおいて用い、インター符号化されたブロックおよびイントラ符号化されたブロックの両方について残余符号化を行うことができる。AMT方式は、HEVCにおける現在の変換以外のDCT/DSTファミリーからの多重選択変換を用いてもよい。新しく導入された変換行列は、DST-7、DCT-8である。表1に、N点入力に対して選択されたDST/DCTの基底関数の例を示す。
VVCなどの一部の例では、符号化ブロックの高さと幅がともに64以下である場合、TBサイズは符号化ブロックサイズと同じである。符号化ブロックの高さまたは幅のいずれかが64より大きい場合、(逆変換、逆一次変換などの)変換またはイントラ予測を行うと、符号化ブロックはさらに複数のサブブロックに分割される。ここでそれぞれのサブブロックの幅と高さは64以下である。1つの変換を、それぞれのサブブロックに実行することができる。
変換ユニットのセマンティックの例は、次の通りである。cu_mts_flag[x0][y0]が1に等しい場合、関連する輝度変換ブロックの残余サンプルに多重変換選択を適用することを指定する。cu_mts_flag[x0][y0]が0に等しい場合、関連する輝度変換ブロックの残余サンプルに多重変換選択を適用しないことを指定する。配列インデックスx0,y0は、画像の左上輝度サンプルに対する、考慮される変換ブロックの左上輝度サンプルの位置(x0,y0)を指定する。cu_mts_flag[x0][y0]が存在しない場合、それは0に等しいと推定される。
残余符号化セマンティックの例は、次の通りである。mts_idx[x0][y0]は、現在の変換ブロックの水平方向と垂直方向に沿って輝度残余サンプルに適用される、変換カーネルを指定する。配列インデックスx0,y0は、画像の左上の輝度サンプルに対する、考慮される変換ブロックの左上の輝度サンプルの位置(x0,y0)を指定する。mts_idx[x0][y0]が存在しない場合、それは-1に等しいと推定される。
一次変換とは、順一次変換または逆一次変換を指す場合がある。水平変換とは、逆水平変換または順水平変換を指す場合がある。同様に、垂直変換とは、逆垂直変換または順垂直変換を指す場合がある。
順一次変換または逆一次変換などの一次変換は、以下に記載するように、ゼロアウト法またはゼロアウト方式を利用することができる。VVCなどの一部の例では、64点(または64長)DCT-2の場合、最初の32個の係数のみが計算され、残りの係数は0に設定される。したがって、DCT-2変換を用いて符号化されたM×Nブロックの場合、左上のmin(M,32)×min(N,32)の低周波数係数が計算される。残りの係数は0に設定され、通知されない。一例では、残りの係数は計算されない。係数ブロックのエントロピー符号化を、係数ブロックサイズをmin(M,32)×min(N,32)として設定することによって実行することができ、それによってM×Nブロックの係数符号化は、min(M,32)×min(N,32)係数ブロックと見なされる。
逆一次変換や順一次変換などの一次変換の主要な複雑さの1つの態様は、サンプルあたりの平均乗算回数(MPS)である。例えば、8×8一次変換では、完全行列乗算を用いるDST-7が8×8ブロックの水平変換と垂直変換の両方に適用される場合、水平変換はそれぞれの係数を計算するために8回の乗算を必要とし、垂直変換はそれぞれの係数を計算するために8回の乗算を必要とし、したがって合わせて16の乗算がサンプルごとに用いられる。
一部の例では、最悪ケースのMPSは、以下に記載するように、32×32DCT2と32×64DCT-2である。MPSはまた、係数あたりの乗算と呼ばれる場合がある。
M×NのTUでは、TUの左上のm×n(即ち、mnの積)領域で非ゼロ変換係数が保持される場合、直接行列乗算構造で実装された逆変換の係数あたりの乗算回数は、
VVCなどの一部の例では、DST7/DCT8は、最大32点(例えば、4点DST-7、8点DST-7、16点DST-7、32点DST-7、4点DCT-8、8点DCT-8、16点DCT-8および32点DCT-8)で変換され、DCT2変換は、最大64点(例えば、4点DCT-2、8点DCT-2、16点DCT-2、32点DCT-2および64点DCT-2)で一次変換に対して定義される。64点一次変換(例えば、64点DCT-2)の場合、変換係数ゼロアウト方式(ゼロアウト法、ゼロアウト方式とも呼ばれる)を適用することができる。ゼロアウト方式では、64点一次変換の場合、一部の例では、最初の32個の係数のみが保持され、残りの係数は0に設定される。例えば、64×64ブロックである場合、左上の32×32の係数が保持され、残りの係数は0に設定される。64×NブロックでありNが32以下である場合、左の32×Nの係数を保持し、残りの係数を0に設定してもよい。M×64ブロックでありMが32である場合、上位のM×32の係数を保持し、残りの係数を0に設定してもよい。
表3に係数ごとの乗算回数を示す。ここで、Mはブロック幅であり、Nはブロック高さであり、mは水平方向(即ち、それぞれの行)に保持される係数の数であり、nは垂直方向(即ち、それぞれの列)に保持される係数の数である。表3に示すように、左上の16×16の係数がDST-7/DCT-8用に保持される(即ち、m=n=16である)場合、最悪ケース(例えば、係数あたりの乗算回数が最大数である)としては、32×64および32×32DCT-2が挙げられる。例えば、(ハーフバタフライを用いた)32×64および32×32DCT-2の係数あたりの乗算回数は40であり、悪いケースに対応する。
一部の例では、ゼロアウトなしでハーフバタフライを用いる32×32DCT2、ゼロアウト付き32×32DST7/DCT8(m=n=16)、ゼロアウト付き32×16DST7/DCT8(m=n=16)、ゼロアウト付き16×32DST7/DCT8(m=n=16)を、ビデオ符号化で用いることができる。
一例では、35×3の分離不可能な2次変換が、4×4と8×8の両方のブロックサイズで利用可能である。ここで、35はイントラ予測モードに関連付けられた変換セットの数であり、3はそれぞれのイントラ予測モードのNSST候補の数である。表4に、イントラ予測モードからそれぞれの変換セットへのマッピングの例を示す。輝度/彩度変換係数に適用される変換セットは、イントラ予測モードから変換セットインデックスへのマッピングを示す表4に従って、対応する輝度/彩度イントラ予測モードによって指定される。対角予測方向に対応する34よりも大きいイントラ予測モードの場合、変換係数ブロックは、それぞれエンコーダ/デコーダにおいてNSSTの前後で転置される。
変換セットごとに、選択されたNSST候補はさらに、明示的に通知されたCUレベルのNSSTインデックスによって指定され得る。CUレベルのNSSTインデックスは変換係数の後にそれぞれのイントラ符号化されたCUのビットストリームで通知され、切り捨てユーナリーバイナライゼーションがそのCUレベルのNSSTインデックスに用いられる。例えば、切り捨てられた値は、平面モードまたはDCモードでは2であり、角度イントラ予測モードでは3である。一例では、CUレベルのNSSTインデックスは、CUに非ゼロ係数が複数ある場合にのみ通知される。デフォルト値はゼロであり、通知されず、このことはNSSTがCUに適用されていないことを示す。値1~3のそれぞれは、変換セットから適用されるNSST候補を示す。
表3を参照すると、DCT-2が一次変換で用いられる場合、一次変換に用いられる最悪ケースのMPSは、32×32または32×64のTBサイズに対応することができる。一例では、最悪ケースのMPSは、2番目に悪いケース(例えば、DCT2を用いる場合の64×64または64×32のTBサイズ)に対して1/3多くの乗算を用いる。本開示の態様は、DCT-2を用いて逆一次変換などの一次変換を実行する場合に32×32または32×64のTBサイズのMPSを低減する方法を含む。本明細書の実施形態はまた、任意の適切なTBサイズのMPSを低減するために、DCT-2に限定されない任意の適切な変換を用いて適用され得る。適切な変換は、DCT-2、DST-7、DST-4、DCT-8、DCT-4などを含むDCT及び/又はDSTファミリーの変換行列を用いることができる。
本明細書に記載の実施形態は別々に用いることも、任意の順序で組み合わせて用いることもできる。さらに実施形態は、エンコーダ、デコーダなどの処理回路(例えば、1つ以上のプロセッサまたは1つ以上の集積回路)によって実装することができる。一例では、1つ以上のプロセッサは、非一時的コンピュータ可読媒体に格納されたプログラムを実行することができる。
本開示では、MTS候補のDST-7に適用可能な実施形態は、DST-4に適用可能であり得、逆もまた同様である。同様に、MTS候補のDCT-8に適用可能な実施形態は、DCT-4にも適用可能であり、逆もまた同様である。
本開示では、NSSTに適用可能な実施形態は、NSSTの代替設計である縮小二次変換(RST)に適用可能であり得る。二次変換とは、NSSTまたはRSTを指すことができる。
一実施形態では、第2順序が、特定のTBサイズに対して用いられる(例えば、第1順序が第2順序に切り替えられる)。したがって、水平方向および垂直方向逆変換を適用する順序は、TBサイズに依存し得る。TBサイズとは、M×N、TBの幅、TBの高さなどのTBの領域を指すことができる。一例では、TBサイズが32×64である場合、第2順序が用いられる(即ち、逆水平変換が逆垂直変換の前に適用される)。TBサイズが32×64と異なる場合、第1順序が用いられる(即ち、逆垂直変換が逆水平変換の前に適用される)。
一実施形態では、M×NのTBの高さNがTBの幅Mよりも大きい場合、第2順序を用いて、逆水平変換を逆垂直変換の前に適用することができる。そうでなく、TBの高さNがTBの幅M以下である場合、第1順序を用いて、逆垂直変換を逆水平変換の前に適用することができる。
逆水平変換を実行して、M×Nの第1ブロックの第1要素をM×Nの第2ブロックの第2要素に変換することができる。逆水平変換は、M長変換などの1次元変換と呼ぶことができ、逆水平変換は、それぞれの行にM個の第1要素を有する第1ブロックに行ごとに適用され得る。ある実施形態では、第2ブロックの左m列の第2要素は逆水平変換によって計算され、一方、第2ブロックの右の(M-m)列の第2要素は計算されず、ゼロになる。逆水平変換がゼロアウト法を含む場合、mはM未満の正の整数であり、上記の逆水平変換は第2ブロックのそれぞれの行の最初のm個の第2要素を計算するが、残りの(M-m)個の第2要素はそれぞれの行で計算されず、ゼロになる。これにより、(それぞれの行の)最初のm個の第2要素は、ゼロアウト法を用いたM長変換によって保持される。したがって、計算回数(と計算され格納されるデータの量と)を、ゼロアウト法を含むかまたは用いることによって削減することができる。逆水平変換がゼロアウト法を含まない場合、mはMに等しくなり得る。
逆垂直変換を実行して、M×Nの第3ブロックの第3要素をM×Nの第4ブロックの第4要素に変換することができる。逆垂直変換は、N長変換などの1次元変換と呼ぶことができる。ここで、逆垂直変換を列ごとに第3ブロックに適用することができ、それぞれの列はN個の第3要素を有する。一実施形態では、第4ブロックの上位n行の第4要素は逆垂直変換によって計算され、一方、第4ブロックの下位(N-n)行の第4要素は計算されず、ゼロになる。逆垂直変換がゼロアウト法を含む場合、nはN未満の正の整数であり、上記の逆垂直変換は、第4ブロックのそれぞれの列の最初のn個の第4要素を計算するが、それぞれの列の残りの(N-n)個の第4要素列は計算されず、ゼロになる。これにより、(それぞれの列の)最初のn個の第4要素は、ゼロアウト法を用いたN長変換によって保持される。したがって、計算回数(と計算され格納されるデータの量と)を、ゼロアウト法を含めることによって削減することができる。逆垂直変換がゼロアウト法を含まない場合、nはNに等しくなり得る。
逆一次変換、例えばDCT-2を、M×NのTBサイズを有する係数ブロックに適用して、M×Nの残余ブロックを取得することができる。本開示の一実施形態によれば、残余ブロックのm×n領域の第1残余データは、逆一次変換によって決定され、残余ブロックのm×n領域外の第2残余データは、逆一次変換によって計算されず、mはM以下であり、nはN以下である。上記のように、逆水平変換がゼロアウト法を含む場合、mはM未満である。逆垂直変換がゼロアウト法を含む場合、nはN未満である。比率m/Mが比率n/N以上である場合、逆垂直変換を適用する前に、逆水平変換が適用される。そうでなく、比率m/Mが比率n/Nより小さい場合、逆水平変換を適用する前に、逆垂直変換が適用される。
一般的に、逆一次変換は、係数ブロックの変換係数を残余ブロックの残余データに変換するように実行される。TBは、係数ブロック及び/又は残余ブロックを参照することができる。TBサイズ、係数ブロックのサイズおよび残余ブロックのサイズは、M×Nである。比率m/Mが比率n/N以上である場合、逆垂直変換を適用する前に、逆水平変換が適用される。したがって、第1ブロックはM×Nの係数ブロックであり、第1データは変換係数である。第2ブロックはM×Nの中間ブロックであり、第2データは中間データである。第3ブロックは第2ブロックと同一であり、第3データは第2データと同一である。第4ブロックはM×Nの残余ブロックであり、第4データは残余データである。
TBサイズが32×64であって、第1順序を用いる場合、32長逆水平変換をゼロアウトと共に適用し、残余ブロックの左16列(即ち、それぞれの行の残余データの最初の16個)を計算することによって、中間データを有する32×64の中間ブロックを、残余データを有する残余ブロックに変換することができる。残余ブロック内の残りの残余データは計算されず、ゼロになる(例えば、残りの残余データをゼロに設定することができる)。
一部の例では、TBサイズがM×32でMが32より小さい場合、32長逆垂直変換はゼロアウト方式を適用しない。一部の例では、TBサイズが32×NでNが32より小さい場合、32長逆水平変換はゼロアウト方式を適用しない。
一部の実施形態によれば、1次元変換を用いて行または列について計算されるデータの量は、1次元変換が逆水平変換であるか逆垂直変換であるかに基づいて決定することができる。
例えば、ゼロアウト方式は、1次元変換のうちの1つにのみ用いられ得る。一実施形態では、逆一次変換を、第1順序を用いて実行し、それによって、逆垂直変換を最初に、続いて逆水平変換を適用する。TBサイズは、32×32である。一例では、32長垂直変換はゼロアウト法を適用しない。したがって、32長逆垂直変換は、全ての中間データを計算するか、または中間ブロックの32行に保持する。32長逆水平変換は、ゼロアウト法を用いて、残余ブロックの左16列を計算または保持する。残余ブロックの残りの残余データは計算されず、ゼロになる(例えば、残りの残余データをゼロに設定することができる)。一例では、32長逆垂直変換は、ゼロアウト法を用いて中間ブロックの上位16行を計算または保持する。中間ブロックの残りの中間データは計算されず、ゼロになる(例えば、残りの中間データをゼロに設定することができる)。一方、32長逆水平変換は、ゼロアウト方式を適用しない。したがって、32長逆水平変換は、残余ブロックの32列の全ての残余データを計算または保持する。
第1逆一次変換が逆二次変換なしでTBに適用される場合、第1MPSは第1逆一次変換に起因する。第2逆一次変換と逆二次変換とがTBに適用される場合、第2MPS(合成MPSとも呼ばれる)は、第2逆一次変換と逆二次変換の両方に、乗算を含むことができる。第1逆一次変換が第2逆一次変換と同一である場合、追加の乗算が逆二次変換で用いられるため、第2MPSが第1MPSよりも大きくなり得る。以下の実施形態は、合成MPSを制約または削減してMPS制限(例えば、表3に示す最悪ケースのMPS)内にあるように実装され、これにより符号化効率を改善することができる。
本開示の態様によれば、ゼロアウト方式を用いて保持されるいくつかの非ゼロ変換係数は、及び/又はゼロアウト法が逆一次変換で用いられるか否かは、二次変換が適用されるか否かに依存し得る。したがって、逆一次変換と二次変換との合成MPSを削減することができる。第1および第2逆一次変換を再度参照すると、本開示の態様によれば、第1逆一次変換は、第1数の残余データを計算または保持することができ、第2逆一次変換は、第2数の残余データを計算または保持することができ、第2数の残余データは第1数の残余データより小さく、その結果、合成MPS(即ち、第2MPS)は第1MPSと類似する。一例では、第2逆一次変換の少なくとも1つの1次元変換(例えば、逆水平変換または逆垂直変換)は、ゼロアウト法を含む。第1逆一次変換の1次元変換は、ゼロアウト法を含むこともできるが、第2逆一次変換は、第1逆一次変換よりも少ない残余データを計算または保持することができる。
上記のように、逆一次変換と逆二次変換をTBに適用して、MPSを合成することができる。一般的に、逆一次変換は、異なるタイプ(例えば、DCT-2、DST-7、DST-4、DCT-8、DCT-4など)を含むことができる。本開示の態様によれば、ゼロアウト法を用いるか否か及び/又は逆二次変換においてゼロアウト法を用いる場合に計算されるまたは係数ブロックに保持されるデータの量は、逆一次変換のタイプに基づいて決定することができ、したがって合成MPSを削減することができる。例えば、逆一次変換がより複雑である(例えば、逆一次変換のMPSが比較的大きい)場合、逆二次変換でゼロアウト法を用いる場合に計算されるかまたは係数ブロックに保持されるデータの量を、さらに削減することができる。
本開示の態様によれば、ゼロアウト法は、TBに用いられるイントラ予測モードに応じて実行することができる。一部の実施形態では、ゼロアウト法を用いるか否かと、ゼロアウト法を用いるときに計算または保持されるデータの量とが、イントラ予測モードに基づいて決定され得る。
一実施形態では、逆水平変換または逆垂直変換がゼロアウト法を用いて実行されるか否かは、TBに用いられるイントラ予測方向に依存する場合がある。イントラ予測方向は、イントラ予測モードに対応する。一例では、イントラ予測方向が水平予測方向に近い場合、ゼロアウト法は逆水平変換に適用される。一例では、イントラ予測方向が垂直予測方向に近い場合、ゼロアウト法は逆垂直変換に適用される。例えば、水平方向の予測方向は値Horでインデックス付けされ、垂直方向の予測方向は値Verでインデックス付けされる。閾値thresは、水平予測方向に対応する水平モードまたは垂直予測方向に対応する垂直モードに対するイントラ予測モードの近さを決定するように定義され得る。[Hor-thres,Hor+thres]の範囲内でインデックス付けされたイントラ予測モード(またはイントラ予測方向)は、水平予測方向に近いと決定される。[Ver-thres,Ver+thres]の範囲内でインデックス付けされたイントラ予測モードは、垂直予測方向に近いと決定され得る。閾値thresの値の例としては、1,2,3,4,…,および16が挙げられるが、これらに限定されない。
一実施形態では、逆一次変換及び/又は二次変換でゼロアウト法を用いるときに計算または保持されるデータの量を、TBのイントラ予測方向に基づいて決定することができる。
S1410で、符号化されたビデオビットストリームからの係数ブロックなどのTBの符号化情報を復号することができる。符号化情報は、TBサイズ(または係数ブロックのサイズと呼ばれる)を示すことができる。上記のように、TBサイズは、TBの領域、幅、高さなどを指す場合がある。
S1420で、逆一次変換の逆水平変換および逆垂直変換が実行される順序を、係数ブロックのサイズに基づいて決定することができる。係数ブロックの変換係数を、逆一次変換によって残余ブロックの残余データに変換することができる。上記のように、一例では、順序は第1順序である。一例では、順序は第2順序である。
S1430で、上記のように、TBサイズが条件を満たすか否かを判定することができる。条件は、TBサイズが32×64であるか否かである。条件は、M×Nの係数ブロックの高さNが係数ブロックの幅Mよりも大きいことである。条件は、第1比率と第2比率を比較することができる。ここで、第1比率(例えば、m/M)は、行内のデータの総量に対して行について計算されたデータの量であり、第2比率(n/N)は、列内のデータの総量に対して列について計算されたデータの量である。TBサイズが条件を満たすと判定されると、プロセス1400はS1440に進む。そうでない場合、プロセス1400はS1450に進む。
プロセス1400は適切に適合させることができる。 例えば、1つ以上のステップを変更、省略または組み合わせることができる。例えば、S1420とS1430とを組み合わせることができる。追加のステップを追加することもできる。プロセス1400を実行する順序を変更することもできる。
S1510で、符号化されたビデオビットストリームからの係数ブロックなどのTBの符号化情報を復号することができる。符号化情報は、TBサイズ(係数ブロックのサイズとも呼ばれる)を示すことができる。
S1520で、逆一次変換の逆水平変換および逆垂直変換のうちの1つにおいて計算回数(または計算されるデータの量)を削減するか否かを、係数ブロックのサイズに基づいて判定することができる。係数ブロックの変換係数は、逆一次変換によって残余ブロックの残余データに変換され得る。一実施形態では、第1順序が用いられる。逆垂直変換は、係数ブロックの変換係数を中間ブロックの中間データに変換することができ、逆水平変換は、中間データを残余ブロックの残余データに変換することができる。一例では、1次元変換(例えば、逆水平変換または逆垂直変換)の計算回数を削減することは、1次元変換がゼロアウト法を含むことを意味する。ここで、データの最初の16行(逆水平変換の場合)または16列(逆垂直変換の場合)が計算され、残りのデータは計算されない。例えば、TBサイズが32×64および32×32のうちのいずれかである場合、1次元変換の計算回数を削減すると判定される。1次元変換の計算回数を削減すると判定すると、プロセス1500はS1530に進む。
S1530で、逆水平変換の計算回数を削減するか否かを判定することができる。逆水平変換の計算回数を削減する場合、プロセス1500はS1540に進む。そうでない場合、プロセス1500はS1550に進む。
S1530は適切に変更することができる。例えば、逆水平変換の計算回数を削減するか否かを判定する代わりに、S1530で、逆垂直変換の計算回数を削減するか否かを判定することができる。
S1550で、逆一次変換が実行され、逆垂直変換はゼロアウト法を含み、したがって、中間ブロックの中間データの上位16行は逆垂直変換によって計算され、中間ブロックの残りの中間データは、上記のように、計算されずゼロになる。
プロセス1500は適切に適合させることができる。例えば、1つ以上のステップを変更、省略または組み合わせることができる。例えば、ステップS1520とS1530とを1つのステップに組み合わせることができる。追加のステップを追加することもできる。プロセス1500を実行する順序を変更することもできる。
コンピュータソフトウェアは、任意の適切な機械コードまたはコンピュータ言語を使用して符号化されてもよく、それは、1つ以上のコンピュータ中央処理装置(CPU)、グラフィックス処理装置(GPU)などによって、直接、または、解釈、マイクロコードの実行などにより実行することができる命令を含むコードを作成するために、アセンブリ、コンパイル、リンクなどのメカニズムを施されてもよい。
命令は、例えば、パーソナルコンピュータ、タブレットコンピュータ、サーバ、スマートフォン、ゲーム機器、モノのインターネット機器などを含む、様々なタイプのコンピュータまたはその構成要素上で実行されてもよい。
コンピュータシステム1600は、特定のヒューマンインターフェース入力デバイスを含んでもよい。そのようなヒューマンインターフェース入力デバイスは、例えば、触覚入力(例えば、キーストローク、スワイプ、データグローブの動き)、音声入力(例えば、声、拍手)、視覚入力(例えばジェスチャー)、嗅覚入力(図示せず)などを介して、1人または複数の人間のユーザによる入力に反応するものであってもよい。ヒューマンインターフェースデバイスは、音声(スピーチ、音楽、周囲の音など)、画像(スキャンした画像、静止画カメラで撮影した写真画像など)、ビデオ(二次元ビデオ、立体ビデオを含む三次元ビデオなど)など、人間による意識的な入力に必ずしも直接に関係しない特定のメディアをキャプチャするために用いてもよい。
入力用ヒューマンインターフェースデバイスは、キーボード1601、マウス1602、トラックパッド1603、タッチスクリーン1610、データグローブ(図示せず)、ジョイスティック1605、マイクロフォン1606、スキャナ1607、カメラ1608のうちの1つまたは複数(それぞれ1つのみが図示されている)を含んでもよい。
また、コンピュータシステム1600は、特定のヒューマンインターフェース出力デバイスを含んでもよい。そのようなヒューマンインターフェース出力デバイスは、例えば、触覚出力、音、光、および匂い/味を介して、1人または複数の人間のユーザの感覚を刺激するものであってもよい。そのようなヒューマンインターフェース出力デバイスに含まれてもよいものとしては、触覚出力デバイス(例えば、タッチスクリーン1610による触覚フィードバック)、データグローブ(図示せず)、またはジョイスティック1605などであるが、入力デバイスとして機能しない触覚フィードバックデバイスもあってもよい)、音声出力装置(例えば、スピーカー1609)、ヘッドフォン(図示せず)、視覚出力デバイス(CRTスクリーン、LCDスクリーン、プラズマスクリーン、OLEDスクリーンなどのスクリーン1610であって、それぞれタッチスクリーン入力機能を有する、または有しないもの、かつ触覚フィードバック機能を有する、または有しないもの、などである。ここで、そのうちの一部は、二次元視覚出力、または立体画法出力などの手段による三次元以上の出力を出力することができてもよいもの、さらに仮想現実ゴーグル(描かれていない)、ホログラフィックディスプレイ、スモークタンク(描かれていない))、およびプリンタ(描かれていない)などがある。
また、コンピュータシステム1600は、CD/DVDなどのメディア1621を備えたCD/DVD ROM/RW1620を含む光学メディア、サムドライブ1622、リムーバブルハードドライブまたはソリッドステートドライブ1623、テープやフロッピーディスクなどのレガシー磁気メディア(描かれていない)、セキュリティドングル(描かれていない)などの特殊なROM/ASIC/PLDベースのデバイスなど、人間がアクセス可能な記憶装置およびそれらに関連付けられたメディアを含んでもよい。
また当業者には、本願において開示された主題に関連して使用される用語「コンピュータ可読媒体」が、伝送媒体、搬送波、または他の一過性の信号を包含しないことは周知のことである。
また、コンピュータシステム1600は、1つまたは複数の通信ネットワークへのインターフェースを含んでもよい。ネットワークは、例えば、無線式、有線式、光学式であってもよい。ネットワークはさらに、ローカルエリア、ワイドエリア、メトロポリタンエリア、車両および産業用、実時間型、遅延耐性型などであってもよい。ネットワークの例としては、イーサネットなどのローカルエリアネットワーク、無線LAN、ならびにGSM、3G、4G、5G、LTEなどのセルラーネットワーク、ケーブルテレビ、衛星テレビ、地上波放送テレビなどのテレビ有線または無線広域デジタルネットワーク、CANBusなどの車両および産業用ネットワークなどが挙げられる。特定の汎用データポートまたは周辺バス1649(例えば、コンピュータシステム1600のUSBポート)に接続される外部ネットワークインターフェースアダプタを必要とするのが一般的である特定のネットワークがあり、また、後述のシステムバス(例えば、PCコンピュータシステムに組み込まれるイーサネットインターフェースや、スマートフォンコンピュータシステムに組み込まれるセルラーネットワークインターフェースなど)に取り付けることでコンピュータシステム1600のコアに組み込まれるのが一般的であるネットワークもある。これらのネットワークのいずれかを使用して、コンピュータシステム1600は、他のエンティティと通信することができる。このような通信は、単一方向受信のみのもの(例えば、テレビ放送)、単一方向送信のみのもの(例えば、特定のCANbusデバイスへのCANbus)、または、例えばローカルまたはワイドエリアデジタルネットワークを使用する他のコンピュータシステムとの双方向性のものであってもよい。特定のプロトコルやプロトコルスタックは、前述のようにそれらのネットワークやネットワークインターフェースのそれぞれにおいて使用されてもよい。
前述のヒューマンインターフェースデバイス、ヒューマンアクセス可能な記憶装置、およびネットワークインターフェースは、コンピュータシステム1600のコア1640に取り付けられてもよい。
コア1640は、1つまたは複数の中央処理装置(CPU)1641、グラフィックスプロセッシングユニット(GPU)1642、フィールドプログラマブルゲートエリア(FPGA)の形態の特殊なプログラム可能処理装置1643、特定のタスクのためのハードウェアアクセラレータ1644などを含んでもよい。これらのデバイスは、リードオンリーメモリ(ROM)1645、ランダムアクセスメモリ1646、ユーザがアクセスできない内蔵ハードドライブ、SSDなどの内蔵大容量記憶装置1647とともに、システムバス1648を介して接続されてもよい。一部のコンピュータシステムにおいて、システムバス1648は、追加のCPU、GPUなどによる拡張を可能にするために、1つまたは複数の物理的なプラグの形でアクセス可能であってもよい。周辺機器は、コアのシステムバス1648に直接に、または周辺バス1649を介して取り付けることができる。周辺バスのアーキテクチャは、PCI、USBなどを含む。
CPU1641、GPU1642、FPGA1643、およびアクセラレータ1644は、組み合わされて前述のコンピュータコードを構成することができる特定の命令を実行してもよい。そのコンピュータコードは、ROM1645またはRAM1646に格納されていてもよい。また、暫定的なデータは、RAM1646に保存されてもよく、一方、永続的なデータは、例えば、内蔵大容量記憶装置1647に保存されてもよい。記憶装置のいずれかへの高速な記憶およびそれからの取り出しは、CPU1641、GPU1642、大容量記憶装置1647、ROM1645、RAM1646の少なくとも1つに密接に関連し得るキャッシュメモリの使用によって可能になり得る。
コンピュータ可読媒体は、コンピュータが実行する様々な演算を実行するためのコンピュータコードを有してもよい。媒体およびコンピュータコードは、本開示の目的のために特別に設計および構築されたものであってもよく、あるいはコンピュータソフトウェアの技術に精通した者によく知られ、かつ利用可能な種類のものであってもよい。
非限定的な一例として、アーキテクチャ1600、特にコア1640を有するコンピュータシステムは、プロセッサ(CPU、GPU、FPGA、アクセラレータなどを含む)が1つまたは複数の有形のコンピュータ可読媒体に具現化されたソフトウェアを実行することによる機能性を提供することができる。このようなコンピュータ可読媒体は、上で紹介したようなユーザアクセス可能な大容量記憶装置、およびコア内部大容量記憶装置1647またはROM1645などの、非一時的な性質を有するコア1640の特定の記憶装置に関連する媒体であってもよい。本開示の様々な実施形態を実行するソフトウェアは、そのようなデバイスに格納され、コア1640によって実行されてもよい。コンピュータ可読媒体は、特定のニーズに応じて、1つまたは複数のメモリデバイスまたはチップを含んでもよい。ソフトウェアは、コア1640および特にその中の処理装置(CPU、GPU、FPGAなどを含む)に、RAM1646に保存されたデータ構造を定義すること、およびそのようなデータ構造をソフトウェアによって定義されたプロセスに従って変更することを含む、本明細書に記載された特定のプロセスまたは特定のプロセスの特定の部分を実行させることができる。追加または代替として、コンピュータシステムは、本明細書に記載された特定のプロセスまたは特定のプロセスの特定の部分を実行するために、ソフトウェアの代わりに、またはソフトウェアとともに動作することができる回路(例えば、アクセラレータ1644)にハードワイヤードの方式で、またはその他の方式で具現化された論理の結果として機能性を提供することができる。ソフトウェアとは、論理を包含してもよく、また場合により、その逆であってもよい。本願において、コンピュータ可読媒体とは、実行のためのソフトウェアを格納した回路(集積回路(IC)など)、実行のための論理を具現化した回路、または場合によりその両方を含んでもよい。本開示は、ハードウェアおよびソフトウェアの任意の適切な組み合わせを包含する。
【数9】
付録II
64点DCT-2コア
{
{ aa,
aa, aa, aa, aa, aa, aa, aa, aa,
aa, aa, aa, aa, aa, aa, aa, aa,
aa, aa, aa, aa, aa, aa, aa, aa,
aa, aa, aa, aa, aa, aa, aa, aa,
aa, aa, aa, aa, aa, aa, aa, aa,
aa, aa, aa, aa, aa, aa, aa, aa,
aa, aa, aa, aa, aa, aa, aa, aa,
aa, aa, aa, aa, aa, aa, aa }
{ bf,
bg, bh, bi, bj, bk, bl, bm, bn,
bo, bp, bq, br, bs, bt, bu, bv,
bw, bx, by, bz, ca, cb, cc, cd,
ce, cf, cg, ch, ci, cj, ck, -ck, -cj, -ci,
-ch, -cg, -cf, -ce, -cd, -cc, -cb, -ca, -bz, -by, -bx, -bw, -bv, -bu, -bt, -bs,
-br, -bq, -bp, -bo, -bn, -bm, -bl, -bk, -bj, -bi, -bh, -bg, -bf }
{ ap,
aq, ar, as, at, au, av, aw, ax,
ay, az, ba, bb, bc, bd, be, -be, -bd, -bc,
-bb, -ba, -az, -ay, -ax, -aw, -av, -au, -at, -as, -ar, -aq, -ap, -ap, -aq, -ar,
-as, -at, -au, -av, -aw, -ax, -ay, -az, -ba, -bb, -bc, -bd, -be,
be, bd, bc, bb, ba, az, ay, ax,
aw, av, au, at, as, ar, aq, ap }
{ bg,
bj, bm, bp, bs, bv, by, cb, ce,
ch, ck, -ci, -cf, -cc, -bz, -bw, -bt, -bq, -bn, -bk, -bh, -bf, -bi, -bl,
-bo, -br, -bu, -bx, -ca, -cd, -cg, -cj, cj, cg, cd, ca,
bx, bu, br, bo, bl, bi, bf, bh,
bk, bn, bq, bt, bw, bz, cc, cf,
ci, -ck, -ch, -ce, -cb, -by, -bv, -bs, -bp, -bm, -bj, -bg }
{ ah,
ai, aj, ak, al, am, an, ao, -ao, -an, -am,
-al, -ak, -aj, -ai, -ah, -ah, -ai, -aj, -ak, -al, -am, -an, -ao,
ao, an, am, al, ak, aj, ai, ah,
ah, ai, aj, ak, al, am, an, ao, -ao,
-an, -am, -al, -ak, -aj, -ai, -ah, -ah, -ai, -aj, -ak, -al, -am, -an,
-ao, ao, an, am, al, ak, aj,
ai, ah }
{ bh,
bm, br, bw, cb, cg, -ck, -cf, -ca, -bv, -bq, -bl, -bg,
-bi, -bn, -bs, -bx, -cc, -ch, cj, ce, bz, bu,
bp, bk, bf, bj, bo, bt, by, cd,
ci, -ci, -cd, -by, -bt, -bo, -bj, -bf, -bk, -bp, -bu, -bz, -ce, -cj, ch,
cc, bx, bs, bn, bi, bg, bl, bq,
bv, ca, cf, ck, -cg, -cb, -bw, -br, -bm, -bh }
{ aq,
at, aw, az, bc, -be, -bb, -ay, -av, -as, -ap, -ar, -au, -ax,
-ba, -bd, bd, ba, ax, au, ar, ap,
as, av, ay, bb, be, -bc, -az, -aw, -at, -aq, -aq, -at,
-aw, -az, -bc, be, bb, ay, av, as,
ap, ar, au, ax, ba, bd, -bd, -ba, -ax, -au, -ar,
-ap, -as, -av, -ay, -bb, -be, bc, az, aw, at, aq
}
{ bi,
bp, bw, cd, ck, -ce, -bx, -bq, -bj, -bh, -bo, -bv, -cc,
-cj, cf, by, br, bk, bg, bn,
bu, cb, ci, -cg, -bz, -bs, -bl, -bf, -bm, -bt, -ca, -ch, ch,
ca, bt, bm, bf, bl, bs, bz, cg, -ci,
-cb, -bu, -bn, -bg, -bk, -br, -by, -cf, cj, cc, bv,
bo, bh, bj, bq, bx, ce, -ck, -cd, -bw, -bp, -bi }
{ ad,
ae, af, ag, -ag, -af, -ae, -ad, -ad, -ae, -af, -ag, ag,
af, ae, ad, ad, ae, af, ag, -ag, -af, -ae,
-ad, -ad, -ae, -af, -ag, ag, af, ae, ad,
ad, ae, af, ag, -ag, -af, -ae, -ad, -ad, -ae, -af, -ag,
ag, af, ae, ad, ad, ae, af, ag, -ag,
-af, -ae, -ad, -ad, -ae, -af, -ag, ag, af, ae, ad }
{ bj,
bs, cb, ck, -cc, -bt, -bk, -bi, -br, -ca, -cj, cd,
bu, bl, bh, bq, bz, ci, -ce, -bv, -bm, -bg, -bp,
-by, -ch, cf, bw, bn, bf, bo, bx, cg,
-cg, -bx, -bo, -bf, -bn, -bw, -cf, ch, by, bp,
bg, bm, bv, ce, -ci, -bz, -bq, -bh, -bl, -bu, -cd,
cj, ca, br, bi, bk, bt, cc, -ck, -cb, -bs,
-bj }
{ ar,
aw, bb, -bd, -ay, -at, -ap, -au, -az, -be, ba, av,
aq, as, ax, bc, -bc, -ax, -as, -aq, -av, -ba, be,
az, au, ap, at, ay, bd, -bb, -aw, -ar, -ar, -aw,
-bb, bd, ay, at, ap, au, az, be, -ba,
-av, -aq, -as, -ax, -bc, bc, ax, as, aq,
av, ba, -be, -az, -au, -ap, -at, -ay, -bd, bb, aw, ar }
{ bk,
bv, cg, -ce, -bt, -bi, -bm, -bx, -ci, cc, br, bg,
bo, bz, ck, -ca, -bp, -bf, -bq, -cb, cj, by,
bn, bh, bs, cd, -ch, -bw, -bl, -bj, -bu, -cf, cf,
bu, bj, bl, bw, ch, -cd, -bs, -bh, -bn, -by, -cj,
cb, bq, bf, bp, ca, -ck, -bz, -bo, -bg, -br, -cc,
ci, bx, bm, bi, bt, ce, -cg, -bv, -bk }
{ ai,
al, ao, -am, -aj, -ah, -ak, -an, an, ak, ah,
aj, am, -ao, -al, -ai, -ai, -al, -ao, am, aj, ah,
ak, an, -an, -ak, -ah, -aj, -am, ao, al, ai,
ai, al, ao, -am, -aj, -ah, -ak, -an, an, ak,
ah, aj, am, -ao, -al, -ai, -ai, -al, -ao, am, aj,
ah, ak, an, -an, -ak, -ah, -aj, -am, ao, al, ai }
{ bl, by,
-ck, -bx, -bk, -bm, -bz, cj, bw, bj, bn, ca, -ci,
-bv, -bi, -bo, -cb, ch, bu, bh, bp, cc, -cg, -bt,
-bg, -bq, -cd, cf, bs, bf, br, ce, -ce, -br, -bf,
-bs, -cf, cd, bq, bg, bt, cg, -cc, -bp, -bh, -bu,
-ch, cb, bo, bi, bv, ci, -ca, -bn, -bj, -bw,
-cj, bz, bm, bk, bx, ck, -by, -bl }
{ as, az,
-bd, -aw, -ap, -av, -bc, ba, at, ar, ay, -be, -ax, -aq,
-au, -bb, bb, au, aq, ax, be, -ay, -ar, -at,
-ba, bc, av, ap, aw, bd, -az, -as, -as, -az,
bd, aw, ap, av, bc, -ba, -at, -ar, -ay, be,
ax, aq, au, bb, -bb, -au, -aq, -ax, -be, ay,
ar, at, ba, -bc, -av, -ap, -aw, -bd, az, as }
{ bm, cb,
-cf, -bq, -bi, -bx, cj, bu, bf, bt, ci, -by, -bj,
-bp, -ce, cc, bn, bl, ca, -cg, -br, -bh, -bw,
ck, bv, bg, bs, ch, -bz, -bk, -bo, -cd, cd,
bo, bk, bz, -ch, -bs, -bg, -bv, -ck, bw, bh,
br, cg, -ca, -bl, -bn, -cc, ce, bp, bj, by, -ci,
-bt, -bf, -bu, -cj, bx, bi, bq, cf, -cb, -bm }
{ ab, ac,
-ac, -ab, -ab, -ac, ac, ab, ab, ac, -ac, -ab, -ab,
-ac, ac, ab, ab, ac, -ac, -ab, -ab, -ac,
ac, ab, ab, ac, -ac, -ab, -ab, -ac, ac, ab,
ab, ac, -ac, -ab, -ab, -ac, ac, ab, ab, ac, -ac,
-ab, -ab, -ac, ac, ab, ab, ac, -ac, -ab, -ab,
-ac, ac, ab, ab, ac, -ac, -ab, -ab, -ac,
ac, ab }
{ bn, ce,
-ca, -bj, -br, -ci, bw, bf, bv, -cj, -bs, -bi, -bz,
cf, bo, bm, cd, -cb, -bk, -bq, -ch, bx, bg, bu,
-ck, -bt, -bh, -by, cg, bp, bl, cc, -cc, -bl, -bp,
-cg, by, bh, bt, ck, -bu, -bg, -bx, ch,
bq, bk, cb, -cd, -bm, -bo, -cf, bz, bi, bs,
cj, -bv, -bf, -bw, ci, br, bj, ca, -ce, -bn }
{ at, bc,
-ay, -ap, -ax, bd, au, as, bb, -az, -aq, -aw,
be, av, ar, ba, -ba, -ar, -av, -be, aw, aq,
az, -bb, -as, -au, -bd, ax, ap, ay, -bc, -at, -at, -bc,
ay, ap, ax, -bd, -au, -as, -bb, az, aq, aw, -be,
-av, -ar, -ba, ba, ar, av, be, -aw, -aq, -az,
bb, as, au, bd, -ax, -ap, -ay, bc, at }
{ bo, ch,
-bv, -bh, -ca, cc, bj, bt, -cj, -bq, -bm, -cf,
bx, bf, by, -ce, -bl, -br, -ck, bs, bk, cd, -bz,
-bg, -bw, cg, bn, bp, ci, -bu, -bi, -cb,
cb, bi, bu, -ci, -bp, -bn, -cg, bw, bg, bz, -cd,
-bk, -bs, ck, br, bl, ce, -by, -bf, -bx,
cf, bm, bq, cj, -bt, -bj, -cc, ca, bh, bv,
-ch, -bo }
{ aj, ao,
-ak, -ai, -an, al, ah, am, -am, -ah, -al, an,
ai, ak, -ao, -aj, -aj, -ao, ak, ai, an, -al, -ah,
-am, am, ah, al, -an, -ai, -ak, ao, aj, aj,
ao, -ak, -ai, -an, al, ah, am, -am, -ah, -al, an,
ai, ak, -ao, -aj, -aj, -ao, ak, ai, an, -al, -ah,
-am, am, ah, al, -an, -ai, -ak, ao, aj }
{ bp, ck,
-bq, -bo, -cj, br, bn, ci, -bs, -bm, -ch, bt,
bl, cg, -bu, -bk, -cf, bv, bj, ce, -bw, -bi, -cd,
bx, bh, cc, -by, -bg, -cb, bz, bf, ca, -ca, -bf,
-bz, cb, bg, by, -cc, -bh, -bx, cd, bi, bw,
-ce, -bj, -bv, cf, bk, bu, -cg, -bl, -bt, ch,
bm, bs, -ci, -bn, -br, cj, bo, bq, -ck, -bp }
{ au, -be, -at,
-av, bd, as, aw, -bc, -ar, -ax, bb, aq, ay,
-ba, -ap, -az, az, ap, ba, -ay, -aq, -bb, ax,
ar, bc, -aw, -as, -bd, av, at, be, -au, -au,
be, at, av, -bd, -as, -aw, bc, ar, ax, -bb, -aq,
-ay, ba, ap, az, -az, -ap, -ba, ay, aq, bb,
-ax, -ar, -bc, aw, as, bd, -av, -at, -be, au }
{ bq, -ci, -bl,
-bv, cd, bg, ca, -by, -bi, -cf, bt, bn, ck,
-bo, -bs, cg, bj, bx, -cb, -bf, -cc, bw,
bk, ch, -br, -bp, cj, bm, bu, -ce, -bh, -bz, bz,
bh, ce, -bu, -bm, -cj, bp, br, -ch, -bk, -bw, cc,
bf, cb, -bx, -bj, -cg, bs, bo, -ck, -bn, -bt, cf,
bi, by, -ca, -bg, -cd, bv, bl, ci, -bq }
{ ae, -ag, -ad,
-af, af, ad, ag, -ae, -ae, ag, ad, af, -af,
-ad, -ag, ae, ae, -ag, -ad, -af, af, ad, ag, -ae,
-ae, ag, ad, af, -af, -ad, -ag, ae, ae, -ag, -ad,
-af, af, ad, ag, -ae, -ae, ag, ad, af, -af,
-ad, -ag, ae, ae, -ag, -ad, -af, af, ad, ag, -ae,
-ae, ag, ad, af, -af, -ad, -ag, ae }
{ br, -cf, -bg,
-cc, bu, bo, -ci, -bj, -bz, bx, bl, ck, -bm,
-bw, ca, bi, ch, -bp, -bt, cd, bf, ce, -bs,
-bq, cg, bh, cb, -bv, -bn, cj, bk, by, -by,
-bk, -cj, bn, bv, -cb, -bh, -cg, bq, bs, -ce, -bf,
-cd, bt, bp, -ch, -bi, -ca, bw, bm, -ck, -bl,
-bx, bz, bj, ci, -bo, -bu, cc, bg, cf, -br
}
{ av, -bb, -ap,
-bc, au, aw, -ba, -aq, -bd, at, ax, -az, -ar,
-be, as, ay, -ay, -as, be, ar, az, -ax,
-at, bd, aq, ba, -aw, -au, bc, ap, bb, -av,
-av, bb, ap, bc, -au, -aw, ba, aq, bd, -at,
-ax, az, ar, be, -as, -ay, ay, as, -be, -ar, -az,
ax, at, -bd, -aq, -ba, aw, au, -bc, -ap, -bb, av }
{ bs, -cc, -bi,
-cj, bl, bz, -bv, -bp, cf, bf, cg, -bo,
-bw, by, bm, -ci, -bh, -cd, br, bt, -cb, -bj,
-ck, bk, ca, -bu, -bq, ce, bg, ch, -bn,
-bx, bx, bn, -ch, -bg, -ce, bq, bu, -ca, -bk,
ck, bj, cb, -bt, -br, cd, bh, ci, -bm, -by,
bw, bo, -cg, -bf, -cf, bp, bv, -bz, -bl, cj,
bi, cc, -bs }
{ ak, -am,
-ai, ao, ah, an, -aj, -al, al, aj, -an, -ah,
-ao, ai, am, -ak, -ak, am, ai, -ao, -ah, -an,
aj, al, -al, -aj, an, ah, ao, -ai, -am, ak,
ak, -am, -ai, ao, ah, an, -aj, -al, al, aj, -an,
-ah, -ao, ai, am, -ak, -ak, am, ai, -ao, -ah,
-an, aj, al, -al, -aj, an, ah, ao, -ai,
-am, ak }
{ bt, -bz,
-bn, cf, bh, ck, -bi, -ce, bo, by, -bu,
-bs, ca, bm, -cg, -bg, -cj, bj, cd, -bp, -bx,
bv, br, -cb, -bl, ch, bf, ci, -bk, -cc, bq,
bw, -bw, -bq, cc, bk, -ci, -bf, -ch, bl, cb, -br,
-bv, bx, bp, -cd, -bj, cj, bg, cg, -bm,
-ca, bs, bu, -by, -bo, ce, bi, -ck, -bh, -cf,
bn, bz, -bt }
{ aw, -ay,
-au, ba, as, -bc, -aq, be, ap, bd, -ar,
-bb, at, az, -av, -ax, ax, av, -az, -at,
bb, ar, -bd, -ap, -be, aq, bc, -as, -ba, au, ay,
-aw, -aw, ay, au, -ba, -as, bc, aq, -be, -ap,
-bd, ar, bb, -at, -az, av, ax, -ax, -av,
az, at, -bb, -ar, bd, ap, be, -aq, -bc, as,
ba, -au, -ay, aw }
{ bu, -bw,
-bs, by, bq, -ca, -bo, cc, bm, -ce, -bk,
cg, bi, -ci, -bg, ck, bf, cj, -bh, -ch, bj,
cf, -bl, -cd, bn, cb, -bp, -bz, br, bx, -bt, -bv,
bv, bt, -bx, -br, bz, bp, -cb, -bn, cd, bl, -cf, -bj,
ch, bh, -cj, -bf, -ck, bg, ci, -bi, -cg, bk, ce,
-bm, -cc, bo, ca, -bq, -by, bs, bw, -bu }
{ aa, -aa,
-aa, aa, aa, -aa, -aa, aa, aa, -aa, -aa,
aa, aa, -aa, -aa, aa, aa, -aa, -aa, aa, aa, -aa,
-aa, aa, aa, -aa, -aa, aa, aa, -aa, -aa,
aa, aa, -aa, -aa, aa, aa, -aa, -aa, aa, aa, -aa,
-aa, aa, aa, -aa, -aa, aa, aa, -aa, -aa,
aa, aa, -aa, -aa, aa, aa, -aa, -aa, aa, aa, -aa,
-aa, aa }
{ bv, -bt,
-bx, br, bz, -bp, -cb, bn, cd, -bl, -cf,
bj, ch, -bh, -cj, bf, -ck, -bg, ci, bi, -cg, -bk,
ce, bm, -cc, -bo, ca, bq, -by, -bs, bw, bu, -bu,
-bw, bs, by, -bq, -ca, bo, cc, -bm, -ce,
bk, cg, -bi, -ci, bg, ck, -bf, cj, bh, -ch,
-bj, cf, bl, -cd, -bn, cb, bp, -bz, -br,
bx, bt, -bv }
{ ax, -av,
-az, at, bb, -ar, -bd, ap, -be, -aq, bc, as, -ba,
-au, ay, aw, -aw, -ay, au, ba, -as, -bc,
aq, be, -ap, bd, ar, -bb, -at, az, av, -ax,
-ax, av, az, -at, -bb, ar, bd, -ap, be, aq,
-bc, -as, ba, au, -ay, -aw, aw, ay, -au, -ba,
as, bc, -aq, -be, ap, -bd, -ar, bb, at, -az, -av,
ax }
{ bw, -bq,
-cc, bk, ci, -bf, ch, bl, -cb, -br, bv, bx,
-bp, -cd, bj, cj, -bg, cg, bm, -ca, -bs,
bu, by, -bo, -ce, bi, ck, -bh, cf, bn, -bz,
-bt, bt, bz, -bn, -cf, bh, -ck, -bi, ce, bo, -by,
-bu, bs, ca, -bm, -cg, bg, -cj, -bj, cd, bp, -bx,
-bv, br, cb, -bl, -ch, bf, -ci, -bk, cc, bq, -bw
}
{ al, -aj,
-an, ah, -ao, -ai, am, ak, -ak, -am, ai, ao,
-ah, an, aj, -al, -al, aj, an, -ah, ao, ai,
-am, -ak, ak, am, -ai, -ao, ah, -an, -aj, al, al,
-aj, -an, ah, -ao, -ai, am, ak, -ak, -am, ai, ao,
-ah, an, aj, -al, -al, aj, an, -ah, ao, ai,
-am, -ak, ak, am, -ai, -ao, ah, -an, -aj, al }
{ bx, -bn,
-ch, bg, -ce, -bq, bu, ca, -bk, -ck, bj, -cb,
-bt, br, cd, -bh, ci, bm, -by, -bw, bo, cg,
-bf, cf, bp, -bv, -bz, bl, cj, -bi, cc, bs,
-bs, -cc, bi, -cj, -bl, bz, bv, -bp, -cf, bf, -cg,
-bo, bw, by, -bm, -ci, bh, -cd, -br, bt, cb,
-bj, ck, bk, -ca, -bu, bq, ce, -bg, ch, bn,
-bx }
{ ay, -as,
-be, ar, -az, -ax, at, bd, -aq, ba, aw, -au,
-bc, ap, -bb, -av, av, bb, -ap, bc, au, -aw,
-ba, aq, -bd, -at, ax, az, -ar, be, as, -ay,
-ay, as, be, -ar, az, ax, -at, -bd, aq, -ba,
-aw, au, bc, -ap, bb, av, -av, -bb, ap, -bc,
-au, aw, ba, -aq, bd, at, -ax, -az, ar, -be,
-as, ay }
{ by, -bk,
cj, bn, -bv, -cb, bh, -cg, -bq, bs, ce, -bf,
cd, bt, -bp, -ch, bi, -ca, -bw, bm, ck, -bl,
bx, bz, -bj, ci, bo, -bu, -cc, bg, -cf, -br, br,
cf, -bg, cc, bu, -bo, -ci, bj, -bz, -bx, bl, -ck,
-bm, bw, ca, -bi, ch, bp, -bt, -cd, bf, -ce,
-bs, bq, cg, -bh, cb, bv, -bn, -cj, bk, -by }
{ af, -ad,
ag, ae, -ae, -ag, ad, -af, -af, ad, -ag, -ae, ae,
ag, -ad, af, af, -ad, ag, ae, -ae, -ag, ad, -af,
-af, ad, -ag, -ae, ae, ag, -ad, af, af, -ad,
ag, ae, -ae, -ag, ad, -af, -af, ad, -ag, -ae, ae,
ag, -ad, af, af, -ad, ag, ae, -ae, -ag, ad, -af,
-af, ad, -ag, -ae, ae, ag, -ad, af }
{ bz, -bh,
ce, bu, -bm, cj, bp, -br, -ch, bk, -bw, -cc, bf,
-cb, -bx, bj, -cg, -bs, bo, ck, -bn, bt, cf,
-bi, by, ca, -bg, cd, bv, -bl, ci, bq, -bq,
-ci, bl, -bv, -cd, bg, -ca, -by, bi, -cf, -bt, bn, -ck,
-bo, bs, cg, -bj, bx, cb, -bf, cc, bw,
-bk, ch, br, -bp, -cj, bm, -bu, -ce, bh, -bz }
{ az, -ap,
ba, ay, -aq, bb, ax, -ar, bc, aw, -as,
bd, av, -at, be, au, -au, -be, at, -av, -bd, as,
-aw, -bc, ar, -ax, -bb, aq, -ay, -ba, ap, -az, -az, ap,
-ba, -ay, aq, -bb, -ax, ar, -bc, -aw, as, -bd, -av, at,
-be, -au, au, be, -at, av, bd, -as, aw, bc,
-ar, ax, bb, -aq, ay, ba, -ap, az }
{ ca, -bf,
bz, cb, -bg, by, cc, -bh, bx, cd, -bi,
bw, ce, -bj, bv, cf, -bk, bu, cg, -bl,
bt, ch, -bm, bs, ci, -bn, br, cj, -bo,
bq, ck, -bp, bp, -ck, -bq, bo, -cj, -br, bn, -ci,
-bs, bm, -ch, -bt, bl, -cg, -bu, bk, -cf, -bv, bj, -ce,
-bw, bi, -cd, -bx, bh, -cc, -by, bg, -cb, -bz, bf, -ca
}
{ am, -ah,
al, an, -ai, ak, ao, -aj, aj, -ao, -ak, ai, -an,
-al, ah, -am, -am, ah, -al, -an, ai, -ak, -ao, aj,
-aj, ao, ak, -ai, an, al, -ah, am, am,
-ah, al, an, -ai, ak, ao, -aj, aj, -ao,
-ak, ai, -an, -al, ah, -am, -am, ah, -al, -an, ai, -ak,
-ao, aj, -aj, ao, ak, -ai, an, al, -ah, am
}
{ cb, -bi,
bu, ci, -bp, bn, -cg, -bw, bg, -bz, -cd, bk, -bs,
-ck, br, -bl, ce, by, -bf, bx, cf, -bm, bq,
-cj, -bt, bj, -cc, -ca, bh, -bv, -ch, bo, -bo, ch,
bv, -bh, ca, cc, -bj, bt, cj, -bq, bm, -cf,
-bx, bf, -by, -ce, bl, -br, ck, bs, -bk,
cd, bz, -bg, bw, cg, -bn, bp, -ci, -bu, bi, -cb }
{ ba, -ar,
av, -be, -aw, aq, -az, -bb, as, -au, bd, ax, -ap,
ay, bc, -at, at, -bc, -ay, ap, -ax, -bd, au, -as,
bb, az, -aq, aw, be, -av, ar, -ba, -ba, ar,
-av, be, aw, -aq, az, bb, -as, au, -bd,
-ax, ap, -ay, -bc, at, -at, bc, ay, -ap,
ax, bd, -au, as, -bb, -az, aq, -aw, -be, av, -ar,
ba }
{ cc, -bl,
bp, -cg, -by, bh, -bt, ck, bu, -bg, bx, ch,
-bq, bk, -cb, -cd, bm, -bo, cf, bz, -bi, bs, -cj,
-bv, bf, -bw, -ci, br, -bj, ca, ce, -bn, bn, -ce,
-ca, bj, -br, ci, bw, -bf, bv, cj, -bs, bi,
-bz, -cf, bo, -bm, cd, cb, -bk, bq, -ch, -bx, bg,
-bu, -ck, bt, -bh, by, cg, -bp, bl, -cc }
{ ac, -ab,
ab, -ac, -ac, ab, -ab, ac, ac, -ab, ab, -ac, -ac,
ab, -ab, ac, ac, -ab, ab, -ac, -ac, ab, -ab,
ac, ac, -ab, ab, -ac, -ac, ab, -ab, ac, ac,
-ab, ab, -ac, -ac, ab, -ab, ac, ac, -ab, ab, -ac,
-ac, ab, -ab, ac, ac, -ab, ab, -ac, -ac, ab,
-ab, ac, ac, -ab, ab, -ac, -ac, ab, -ab, ac }
{ cd, -bo,
bk, -bz, -ch, bs, -bg, bv, -ck, -bw, bh, -br, cg,
ca, -bl, bn, -cc, -ce, bp, -bj, by, ci, -bt, bf,
-bu, cj, bx, -bi, bq, -cf, -cb, bm, -bm, cb,
cf, -bq, bi, -bx, -cj, bu, -bf, bt, -ci, -by, bj,
-bp, ce, cc, -bn, bl, -ca, -cg, br, -bh,
bw, ck, -bv, bg, -bs, ch, bz, -bk, bo, -cd }
{ bb, -au,
aq, -ax, be, ay, -ar, at, -ba, -bc, av, -ap, aw,
-bd, -az, as, -as, az, bd, -aw, ap, -av,
bc, ba, -at, ar, -ay, -be, ax, -aq, au, -bb, -bb,
au, -aq, ax, -be, -ay, ar, -at, ba, bc, -av, ap,
-aw, bd, az, -as, as, -az, -bd, aw, -ap, av, -bc,
-ba, at, -ar, ay, be, -ax, aq, -au, bb }
{ ce, -br,
bf, -bs, cf, cd, -bq, bg, -bt, cg, cc, -bp,
bh, -bu, ch, cb, -bo, bi, -bv, ci, ca, -bn,
bj, -bw, cj, bz, -bm, bk, -bx, ck, by, -bl,
bl, -by, -ck, bx, -bk, bm, -bz, -cj, bw, -bj, bn, -ca,
-ci, bv, -bi, bo, -cb, -ch, bu, -bh, bp, -cc,
-cg, bt, -bg, bq, -cd, -cf, bs, -bf, br, -ce }
{ an, -ak,
ah, -aj, am, ao, -al, ai, -ai, al, -ao, -am, aj,
-ah, ak, -an, -an, ak, -ah, aj, -am, -ao, al,
-ai, ai, -al, ao, am, -aj, ah, -ak, an, an,
-ak, ah, -aj, am, ao, -al, ai, -ai, al, -ao,
-am, aj, -ah, ak, -an, -an, ak, -ah, aj, -am,
-ao, al, -ai, ai, -al, ao, am, -aj, ah,
-ak, an }
{ cf, -bu,
bj, -bl, bw, -ch, -cd, bs, -bh, bn, -by, cj, cb,
-bq, bf, -bp, ca, ck, -bz, bo, -bg, br, -cc,
-ci, bx, -bm, bi, -bt, ce, cg, -bv, bk, -bk,
bv, -cg, -ce, bt, -bi, bm, -bx, ci, cc, -br, bg,
-bo, bz, -ck, -ca, bp, -bf, bq, -cb, -cj, by,
-bn, bh, -bs, cd, ch, -bw, bl, -bj, bu, -cf }
{ bc, -ax,
as, -aq, av, -ba, -be, az, -au, ap, -at, ay, -bd,
-bb, aw, -ar, ar, -aw, bb, bd, -ay, at,
-ap, au, -az, be, ba, -av, aq, -as, ax, -bc,
-bc, ax, -as, aq, -av, ba, be, -az, au,
-ap, at, -ay, bd, bb, -aw, ar, -ar, aw, -bb,
-bd, ay, -at, ap, -au, az, -be, -ba, av, -aq, as,
-ax, bc }
{ cg, -bx,
bo, -bf, bn, -bw, cf, ch, -by, bp, -bg, bm,
-bv, ce, ci, -bz, bq, -bh, bl, -bu, cd, cj,
-ca, br, -bi, bk, -bt, cc, ck, -cb, bs, -bj,
bj, -bs, cb, -ck, -cc, bt, -bk, bi, -br, ca, -cj,
-cd, bu, -bl, bh, -bq, bz, -ci, -ce, bv, -bm, bg,
-bp, by, -ch, -cf, bw, -bn, bf, -bo, bx, -cg }
{ ag, -af,
ae, -ad, ad, -ae, af, -ag, -ag, af, -ae, ad, -ad,
ae, -af, ag, ag, -af, ae, -ad, ad, -ae, af, -ag,
-ag, af, -ae, ad, -ad, ae, -af, ag, ag,
-af, ae, -ad, ad, -ae, af, -ag, -ag, af, -ae, ad,
-ad, ae, -af, ag, ag, -af, ae, -ad, ad,
-ae, af, -ag, -ag, af, -ae, ad, -ad, ae, -af, ag
}
{ ch, -ca,
bt, -bm, bf, -bl, bs, -bz, cg, ci, -cb, bu,
-bn, bg, -bk, br, -by, cf, cj, -cc, bv,
-bo, bh, -bj, bq, -bx, ce, ck, -cd, bw,
-bp, bi, -bi, bp, -bw, cd, -ck, -ce, bx, -bq, bj,
-bh, bo, -bv, cc, -cj, -cf, by, -br, bk, -bg, bn,
-bu, cb, -ci, -cg, bz, -bs, bl, -bf, bm, -bt, ca,
-ch }
{ bd, -ba,
ax, -au, ar, -ap, as, -av, ay, -bb, be, bc,
-az, aw, -at, aq, -aq, at, -aw, az, -bc, -be, bb,
-ay, av, -as, ap, -ar, au, -ax, ba, -bd, -bd, ba,
-ax, au, -ar, ap, -as, av, -ay, bb, -be, -bc, az,
-aw, at, -aq, aq, -at, aw, -az, bc, be,
-bb, ay, -av, as, -ap, ar, -au, ax, -ba, bd }
{ ci, -cd,
by, -bt, bo, -bj, bf, -bk, bp, -bu, bz, -ce,
cj, ch, -cc, bx, -bs, bn, -bi, bg, -bl, bq,
-bv, ca, -cf, ck, cg, -cb, bw, -br, bm,
-bh, bh, -bm, br, -bw, cb, -cg, -ck, cf, -ca, bv,
-bq, bl, -bg, bi, -bn, bs, -bx, cc, -ch, -cj, ce,
-bz, bu, -bp, bk, -bf, bj, -bo, bt, -by, cd, -ci
}
{ ao, -an,
am, -al, ak, -aj, ai, -ah, ah, -ai, aj, -ak, al,
-am, an, -ao, -ao, an, -am, al, -ak, aj, -ai, ah,
-ah, ai, -aj, ak, -al, am, -an, ao, ao,
-an, am, -al, ak, -aj, ai, -ah, ah, -ai, aj,
-ak, al, -am, an, -ao, -ao, an, -am, al, -ak, aj,
-ai, ah, -ah, ai, -aj, ak, -al, am, -an, ao }
{ cj, -cg,
cd, -ca, bx, -bu, br, -bo, bl, -bi, bf, -bh, bk,
-bn, bq, -bt, bw, -bz, cc, -cf, ci, ck,
-ch, ce, -cb, by, -bv, bs, -bp, bm, -bj, bg,
-bg, bj, -bm, bp, -bs, bv, -by, cb, -ce, ch, -ck,
-ci, cf, -cc, bz, -bw, bt, -bq, bn, -bk, bh,
-bf, bi, -bl, bo, -br, bu, -bx, ca, -cd, cg, -cj
}
{ be, -bd,
bc, -bb, ba, -az, ay, -ax, aw, -av, au, -at, as,
-ar, aq, -ap, ap, -aq, ar, -as, at, -au, av,
-aw, ax, -ay, az, -ba, bb, -bc, bd, -be, -be, bd,
-bc, bb, -ba, az, -ay, ax, -aw, av, -au, at,
-as, ar, -aq, ap, -ap, aq, -ar, as, -at, au,
-av, aw, -ax, ay, -az, ba, -bb, bc, -bd, be }
{ ck, -cj,
ci, -ch, cg, -cf, ce, -cd, cc, -cb, ca, -bz, by,
-bx, bw, -bv, bu, -bt, bs, -br, bq, -bp, bo,
-bn, bm, -bl, bk, -bj, bi, -bh, bg, -bf, bf,
-bg, bh, -bi, bj, -bk, bl, -bm, bn, -bo, bp,
-bq, br, -bs, bt, -bu, bv, -bw, bx, -by, bz,
-ca, cb, -cc, cd, -ce, cf, -cg, ch, -ci, cj, -ck
}
}
ここで
{ aa, ab, ac, ad, ae, af, ag, ah, ai, aj, ak, al, am, an, ao, ap,
aq, ar, as, at, au, av, aw, ax, ay, az, ba, bb, bc, bd, be, bf, bg, bh, bi, bj,
bk, bl, bm, bn, bo, bp, bq, br, bs, bt, bu, bv, bw, bx, by, bz, ca, cb, cc, cd,
ce, cf, cg, ch, ci, cj, ck} =
{64,83,36,89,75,50,18,90,87,80,70,57,43,25,9,90,90,88,85,82,78,73,67,61,54,46,38,31,22,13,4,91,90,90,90,88,87,86,84,83,81,79,77,73,71,69,65,62,59,56,52,48,44,41,37,33,28,24,20,15,11,7,2}
付録III
4点DST-7
{
a, b, c, d }
{ c,
c, 0, -c }
{ d, -a,
-c, b }
{ b,
-d, c, -a }
ここで
{a, b, c, d} = { 29, 55, 74, 84}
8点DST-7
{
a, b, c, d, e, f, g, h,}
{ c,
f, h, e, b, -a, -d, -g,}
{ e,
g, b, -c, -h, -d, a, f,}
{
g, c, -d, -f, a, h, b, -e,}
{ h, -a,
-g, b, f, -c, -e, d,}
{ f, -e,
-a, g, -d, -b, h, -c,}
{ d,
-h, e, -a, -c, g, -f, b,}
{ b,
-d, f, -h, g, -e, c, -a,}
ここで
{a, b, c, d, e, f, g, h} = { 17, 32, 46, 60, 71, 78, 85, 86}
16点DST-7
{
a, b, c, d, e, f, g, h,
i, j, k, l, m, n, o, p,}
{ c,
f, i, l, o, o, l, i, f,
c, 0, -c, -f, -i, -l, -o,}
{
e, j, o, m, h, c, -b, -g, -l, -p, -k, -f,
-a, d, i, n,}
{ g,
n, l, e, -b, -i, -p, -j, -c, d, k, o,
h, a, -f, -m,}
{ i,
o, f, -c, -l, -l, -c, f, o, i, 0, -i, -o,
-f, c, l,}
{ k,
k, 0, -k, -k, 0, k, k, 0, -k, -k, 0,
k, k, 0, -k,}
{ m,
g, -f, -n, -a, l, h, -e, -o, -b, k, i, -d, -p,
-c, j,}
{ o,
c, -l, -f, i, i, -f, -l, c, o, 0, -o, -c,
l, f, -i,}
{ p, -a,
-o, b, n, -c, -m, d, l, -e, -k, f, j, -g,
-i, h,}
{ n, -e,
-i, j, d, -o, a, m, -f, -h, k, c, -p,
b, l, -g,}
{ l, -i,
-c, o, -f, -f, o, -c, -i, l, 0, -l, i, c,
-o, f,}
{ j,
-m, c, g, -p, f, d, -n, i, a, -k, l,
-b, -h, o, -e,}
{ h,
-p, i, -a, -g, o, -j, b, f, -n, k, -c, -e,
m, -l, d,}
{ f,
-l, o, -i, c, c, -i, o, -l, f, 0, -f,
l, -o, i, -c,}
{ d,
-h, l, -p, m, -i, e, -a, -c, g, -k, o, -n,
j, -f, b,}
{ b, -d,
f, -h, j, -l, n, -p, o, -m, k, -i, g, -e,
c, -a,}
ここで
{a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p} = { 9, 17, 25, 33, 41, 49, 56,
62, 66, 72, 77, 81, 83, 87, 89, 90}
32点DST-7
{ a,
b, c, d, e, f, g, h, i,
j, k, l, m, n, o, p, q,
r, s, t, u, v, w, x, y,
z, A, B, C, D, E, F,}
{
c, f, i, l, o, r, u, x,
A, D, F, C, z, w, t, q,
n, k, h, e, b, -a, -d, -g, -j, -m, -p, -s, -v, -y, -B,
-E,}
{ e,
j, o, t, y, D, D, y, t,
o, j, e, 0, -e, -j, -o, -t, -y, -D, -D, -y, -t, -o, -j,
-e, 0, e, j, o, t, y, D,}
{ g,
n, u, B, D, w, p, i, b, -e, -l, -s,
-z, -F, -y, -r, -k, -d, c, j, q, x, E,
A, t, m, f, -a, -h, -o, -v, -C,}
{ i,
r, A, C, t, k, b, -g, -p, -y, -E, -v, -m,
-d, e, n, w, F, x, o, f, -c, -l, -u,
-D, -z, -q, -h, a, j, s, B,}
{ k,
v, F, u, j, -a, -l, -w, -E, -t, -i, b, m,
x, D, s, h, -c, -n, -y, -C, -r, -g, d, o,
z, B, q, f, -e, -p, -A,}
{ m,
z, z, m, 0, -m, -z, -z, -m, 0, m, z,
z, m, 0, -m, -z, -z, -m, 0, m, z, z,
m, 0, -m, -z, -z, -m, 0, m, z,}
{ o,
D, t, e, -j, -y, -y, -j, e, t, D, o,
0, -o, -D, -t, -e, j, y, y, j, -e, -t, -D, -o,
0, o, D, t, e, -j, -y,}
{ q,
E, n, -c, -t, -B, -k, f, w, y, h, -i, -z, -v,
-e, l, C, s, b, -o, -F, -p, a, r,
D, m, -d, -u, -A, -j, g, x,}
{ s,
A, h, -k, -D, -p, c, v, x, e, -n, -F, -m,
f, y, u, b, -q, -C, -j, i, B, r, -a, -t,
-z, -g, l, E, o, -d, -w,}
{ u,
w, b, -s, -y, -d, q, A, f, -o, -C, -h, m,
E, j, -k, -F, -l, i, D, n, -g, -B, -p, e,
z, r, -c, -x, -t, a, v,}
{ w,
s, -d, -A, -o, h, E, k, -l, -D, -g, p, z,
c, -t, -v, a, x, r, -e, -B, -n, i, F, j,
-m, -C, -f, q, y, b, -u,}
{ y,
o, -j, -D, -e, t, t, -e, -D, -j, o, y, 0, -y,
-o, j, D, e, -t, -t, e, D, j, -o, -y,
0, y, o, -j, -D, -e, t,}
{ A,
k, -p, -v, e, F, f, -u, -q, j, B, a, -z,
-l, o, w, -d, -E, -g, t, r, -i, -C, -b, y,
m, -n, -x, c, D, h, -s,}
{ C,
g, -v, -n, o, u, -h, -B, a, D, f, -w, -m,
p, t, -i, -A, b, E, e, -x, -l, q, s, -j,
-z, c, F, d, -y, -k, r,}
{ E,
c, -B, -f, y, i, -v, -l, s, o, -p, -r, m,
u, -j, -x, g, A, -d, -D, a, F, b, -C, -e,
z, h, -w, -k, t, n, -q,}
{ F, -a,
-E, b, D, -c, -C, d, B, -e, -A, f, z, -g,
-y, h, x, -i, -w, j, v, -k, -u, l, t, -m,
-s, n, r, -o, -q, p,}
{ D, -e,
-y, j, t, -o, -o, t, j, -y, -e, D, 0,
-D, e, y, -j, -t, o, o, -t, -j, y, e,
-D, 0, D, -e, -y, j, t, -o,}
{ B, -i,
-s, r, j, -A, -a, C, -h, -t, q, k, -z, -b,
D, -g, -u, p, l, -y, -c, E, -f, -v, o, m, -x,
-d, F, -e, -w, n,}
{ z, -m,
-m, z, 0, -z, m, m, -z, 0, z, -m, -m,
z, 0, -z, m, m, -z, 0, z, -m, -m, z,
0, -z, m, m, -z, 0, z, -m,}
{ x, -q,
-g, E, -j, -n, A, -c, -u, t, d, -B, m, k,
-D, f, r, -w, -a, y, -p, -h, F, -i, -o, z, -b,
-v, s, e, -C, l,}
{ v, -u,
-a, w, -t, -b, x, -s, -c, y, -r, -d, z, -q, -e,
A, -p, -f, B, -o, -g, C, -n, -h, D, -m, -i, E, -l,
-j, F, -k,}
{ t,
-y, e, o, -D, j, j, -D, o, e, -y,
t, 0, -t, y, -e, -o, D, -j, -j, D, -o, -e, y,
-t, 0, t, -y, e, o, -D, j,}
{ r,
-C, k, g, -y, v, -d, -n, F, -o, -c, u, -z,
h, j, -B, s, -a, -q, D, -l, -f, x, -w, e,
m, -E, p, b, -t, A, -i,}
{ p,
-F, q, -a, -o, E, -r, b, n, -D, s, -c, -m,
C, -t, d, l, -B, u, -e, -k, A, -v, f, j,
-z, w, -g, -i, y, -x, h,}
{ n,
-B, w, -i, -e, s, -F, r, -d, -j, x, -A, m,
a, -o, C, -v, h, f, -t, E, -q, c, k,
-y, z, -l, -b, p, -D, u, -g,}
{ l,
-x, C, -q, e, g, -s, E, -v, j, b, -n,
z, -A, o, -c, -i, u, -F, t, -h, -d, p, -B, y,
-m, a, k, -w, D, -r, f,}
{ j,
-t, D, -y, o, -e, -e, o, -y, D, -t, j, 0,
-j, t, -D, y, -o, e, e, -o, y, -D, t,
-j, 0, j, -t, D, -y, o, -e,}
{ h,
-p, x, -F, y, -q, i, -a, -g, o, -w, E, -z,
r, -j, b, f, -n, v, -D, A, -s, k, -c, -e,
m, -u, C, -B, t, -l, d,}
{ f,
-l, r, -x, D, -C, w, -q, k, -e, -a, g, -m,
s, -y, E, -B, v, -p, j, -d, -b, h, -n, t,
-z, F, -A, u, -o, i, -c,}
{ d,
-h, l, -p, t, -x, B, -F, C, -y, u, -q, m,
-i, e, -a, -c, g, -k, o, -s, w, -A, E, -D,
z, -v, r, -n, j, -f, b,}
{ b,
-d, f, -h, j, -l, n, -p, r, -t, v, -x, z,
-B, D, -F, E, -C, A, -y, w, -u, s, -q, o,
-m, k, -i, g, -e, c, -a,}
ここで {a, b, c, d, e,
f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F
} = { 4, 9, 13, 17, 21, 26, 30, 34, 38, 42, 45, 50, 53, 56, 60, 63, 66, 68, 72,
74, 77, 78, 80, 82, 84, 85, 86, 88, 88, 89, 90, 90 }
4点DCT-8
{
a, b, c, d,}
{ b,
0, -b, -b,}
{ c, -b,
-d, a,}
{ d,
-b, a, -c,}
ここで
{a, b, c, d} = { 84,74,55,29}
8点DCT-8
{ a,
b, c, d, e, f, g, h,}
{ b,
e, h, -g, -d, -a, -c, -f,}
{ c,
h, -e, -a, -f, g, b, d,}
{
d, -g, -a, -h, c, e, -f, -b,}
{ e, -d,
-f, c, g, -b, -h, a,}
{ f,
-a, g, e, -b, h, d, -c,}
{ g,
-c, b, -f, -h, d, -a, e,}
{ h,
-f, d, -b, a, -c, e, -g,}
ここで
{a, b, c, d, e, f, g, h} = { 86,85,78,71,60,46,32,17}
16点DCT-8
{ a,
b, c, d, e, f, g, h, i,
j, k, l, m, n, o, p,}
{ b,
e, h, k, n, 0, -n, -k, -h, -e, -b, -b, -e, -h, -k, -n,}
{
c, h, m, -p, -k, -f, -a, -e, -j, -o, n, i,
d, b, g, l,}
{ d,
k, -p, -i, -b, -f, -m, n, g, a, h, o, -l, -e, -c,
-j,}
{ e,
n, -k, -b, -h, 0, h, b, k, -n, -e, -e, -n,
k, b, h,}
{ f,
0, -f, -f, 0, f, f, 0, -f, -f, 0, f,
f, 0, -f, -f,}
{ g, -n, -a,
-m, h, f, -o, -b, -l, i, e, -p, -c, -k, j,
d,}
{ h, -k,
-e, n, b, 0, -b, -n, e, k, -h, -h, k,
e, -n, -b,}
{ i, -h,
-j, g, k, -f, -l, e, m, -d, -n, c, o, -b,
-p, a,}
{ j, -e,
-o, a, -n, -f, i, k, -d, -p, b, -m, -g, h,
l, -c,}
{ k,
-b, n, h, -e, 0, e, -h, -n, b, -k, -k, b,
-n, -h, e,}
{ l,
-b, i, o, -e, f, -p, -h, c, -m, -k, a, -j,
-n, d, -g,}
{ m,
-e, d, -l, -n, f, -c, k, o, -g, b, -j, -p,
h, -a, i,}
{ n,
-h, b, -e, k, 0, -k, e, -b, h, -n, -n, h,
-b, e, -k,}
{ o, -k,
g, -c, b, -f, j, -n, -p, l, -h, d, -a, e,
-i, m,}
{ p,
-n, l, -j, h, -f, d, -b, a, -c, e, -g, i,
-k, m, -o,}
ここで
{a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p} = {
90,89,87,83,81,77,72,66,62,56,49,41,33,25,17, 9}
32点DCT-8
{
a, b, c, d, e, f, g, h,
i, j, k, l, m, n, o, p,
q, r, s, t, u, v, w, x,
y, z, A, B, C, D, E, F,}
{
b, e, h, k, n, q, t, w,
z, C, F, -E, -B, -y, -v, -s, -p, -m, -j, -g, -d, -a, -c, -f, -i,
-l, -o, -r, -u, -x, -A, -D,}
{ c,
h, m, r, w, B, 0, -B, -w, -r, -m, -h, -c, -c, -h,
-m, -r, -w, -B, 0, B, w, r, m, h,
c, c, h, m, r, w, B,}
{ d,
k, r, y, F, -A, -t, -m, -f, -b, -i, -p, -w, -D,
C, v, o, h, a, g, n, u, B, -E,
-x, -q, -j, -c, -e, -l, -s, -z,}
{ e,
n, w, F, -y, -p, -g, -c, -l, -u, -D, A, r,
i, a, j, s, B, -C, -t, -k, -b, -h, -q, -z,
E, v, m, d, f, o, x,}
{ f,
q, B, -A, -p, -e, -g, -r, -C, z, o, d, h,
s, D, -y, -n, -c, -i, -t, -E, x, m, b, j,
u, F, -w, -l, -a, -k, -v,}
{ g,
t, 0, -t, -g, -g, -t, 0, t, g, g, t,
0, -t, -g, -g, -t, 0, t, g, g, t, 0, -t,
-g, -g, -t, 0, t, g, g, t,}
{ h,
w, -B, -m, -c, -r, 0, r, c, m, B, -w, -h, -h,
-w, B, m, c, r, 0, -r, -c, -m, -B, w,
h, h, w, -B, -m, -c, -r,}
{ i,
z, -w, -f, -l, -C, t, c, o, F, -q, -a, -r,
E, n, d, u, -B, -k, -g, -x, y, h, j,
A, -v, -e, -m, -D, s, b, p,}
{ j,
C, -r, -b, -u, z, g, m, F, -o, -e, -x, w,
d, p, -E, -l, -h, -A, t, a, s, -B, -i, -k, -D,
q, c, v, -y, -f, -n,}
{ k,
F, -m, -i, -D, o, g, B, -q, -e, -z, s, c,
x, -u, -a, -v, w, b, t, -y, -d, -r, A, f,
p, -C, -h, -n, E, j, l,}
{ l, -E, -h,
-p, A, d, t, -w, -a, -x, s, e, B, -o, -i,
-F, k, m, -D, -g, -q, z, c, u, -v, -b, -y,
r, f, C, -n, -j,}
{ m, -B, -c,
-w, r, h, 0, -h, -r, w, c, B, -m, -m,
B, c, w, -r, -h, 0, h, r, -w, -c, -B,
m, m, -B, -c, -w, r, h,}
{ n, -y, -c,
-D, i, s, -t, -h, E, d, x, -o, -m, z,
b, C, -j, -r, u, g, -F, -e, -w, p, l, -A, -a,
-B, k, q, -v, -f,}
{ o, -v,
-h, C, a, D, -g, -w, n, p, -u, -i, B,
b, E, -f, -x, m, q, -t, -j, A, c, F, -e,
-y, l, r, -s, -k, z, d,}
{ p, -s,
-m, v, j, -y, -g, B, d, -E, -a, -F, c, C,
-f, -z, i, w, -l, -t, o, q, -r, -n, u, k,
-x, -h, A, e, -D, -b,}
{ q, -p,
-r, o, s, -n, -t, m, u, -l, -v, k, w, -j,
-x, i, y, -h, -z, g, A, -f, -B, e, C, -d,
-D, c, E, -b, -F, a,}
{ r, -m,
-w, h, B, -c, 0, c, -B, -h, w, m, -r,
-r, m, w, -h, -B, c, 0, -c, B, h, -w,
-m, r, r, -m, -w, h, B, -c,}
{ s, -j,
-B, a, -C, -i, t, r, -k, -A, b, -D, -h, u,
q, -l, -z, c, -E, -g, v, p, -m, -y, d, -F, -f,
w, o, -n, -x, e,}
{
t, -g, 0, g, -t, -t, g, 0, -g, t, t,
-g, 0, g, -t, -t, g, 0, -g, t, t, -g,
0, g, -t, -t, g, 0, -g, t, t, -g,}
{
u, -d, B, n, -k, -E, g, -r, -x, a, -y, -q, h, -F,
-j, o, A, -c, v, t, -e, C, m, -l, -D,
f, -s, -w, b, -z, -p, i,}
{ v,
-a, w, u, -b, x, t, -c, y, s, -d,
z, r, -e, A, q, -f, B, p, -g, C, o,
-h, D, n, -i, E, m, -j, F, l, -k,}
{ w,
-c, r, B, -h, m, 0, -m, h, -B, -r, c, -w,
-w, c, -r, -B, h, -m, 0, m, -h, B, r,
-c, w, w, -c, r, B, -h, m,}
{ x,
-f, m, -E, -q, b, -t, -B, j, -i, A, u, -c,
p, F, -n, e, -w, -y, g, -l, D, r, -a,
s, C, -k, h, -z, -v, d, -o,}
{ y,
-i, h, -x, -z, j, -g, w, A, -k, f, -v, -B,
l, -e, u, C, -m, d, -t, -D, n, -c, s, E,
-o, b, -r, -F, p, -a, q,}
{ z,
-l, c, -q, E, u, -g, h, -v, -D, p, -b, m,
-A, -y, k, -d, r, -F, -t, f, -i, w, C, -o,
a, -n, B, x, -j, e, -s,}
{ A,
-o, c, -j, v, F, -t, h, -e, q, -C, -y, m,
-a, l, -x, -D, r, -f, g, -s, E, w, -k, b,
-n, z, B, -p, d, -i, u,}
{ B,
-r, h, -c, m, -w, 0, w, -m, c, -h, r, -B,
-B, r, -h, c, -m, w, 0, -w, m, -c, h,
-r, B, B, -r, h, -c, m, -w,}
{ C,
-u, m, -e, d, -l, t, -B, -D, v, -n, f, -c,
k, -s, A, E, -w, o, -g, b, -j, r, -z, -F,
x, -p, h, -a, i, -q, y,}
{ D,
-x, r, -l, f, -a, g, -m, s, -y, E, C,
-w, q, -k, e, -b, h, -n, t, -z, F, B,
-v, p, -j, d, -c, i, -o, u, -A,}
{ E,
-A, w, -s, o, -k, g, -c, b, -f, j, -n, r,
-v, z, -D, -F, B, -x, t, -p, l, -h, d, -a,
e, -i, m, -q, u, -y, C,}
{ F,
-D, B, -z, x, -v, t, -r, p, -n, l, -j, h,
-f, d, -b, a, -c, e, -g, i, -k, m, -o, q,
-s, u, -w, y, -A, C, -E,}
ここで
{a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z,
A, B, C, D, E, F } = {90,90,89,88,88,86,85,84,82,80,78,77,74,72,68,66,63,60,56,53,50,45,42,38,34,30,26,21,17,13,
9, 4}