JP2014523673A - 映像の変換方法及びその装置、逆変換方法及びその装置 - Google Patents

映像の変換方法及びその装置、逆変換方法及びその装置 Download PDF

Info

Publication number
JP2014523673A
JP2014523673A JP2014515766A JP2014515766A JP2014523673A JP 2014523673 A JP2014523673 A JP 2014523673A JP 2014515766 A JP2014515766 A JP 2014515766A JP 2014515766 A JP2014515766 A JP 2014515766A JP 2014523673 A JP2014523673 A JP 2014523673A
Authority
JP
Japan
Prior art keywords
sqrt
bit
cos24
cos8
cos12
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2014515766A
Other languages
English (en)
Inventor
アルシナ,エレナ
アルシン,アレクサンダー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Samsung Electronics Co Ltd
Original Assignee
Samsung Electronics Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Samsung Electronics Co Ltd filed Critical Samsung Electronics Co Ltd
Publication of JP2014523673A publication Critical patent/JP2014523673A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/625Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding using discrete cosine transform [DCT]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T3/00Geometric image transformation in the plane of the image
    • G06T3/40Scaling the whole image or part thereof

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Discrete Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Editing Of Facsimile Originals (AREA)
  • Image Processing (AREA)
  • Complex Calculations (AREA)

Abstract

映像の変換方法及びその装置、逆変換方法及びその装置に係り、該映像変換方法は、Nポイント離散コサイン変換に利用される変換行列を構成する元素を、所定のスケーリング・ファクタを利用してスケーリングし、整数値を有するスケーリングされた元素を獲得し、整数値を有するスケーリングされた元素から構成された整数変換行列を利用して、Nポイント離散コサイン変換を行い、スケーリング・ファクタを利用して、Nポイント離散コサイン変換行列の結果値をデスケーリングする。

Description

本発明は、映像符号化、復号化の方法及びその装置に係り、さらに詳細には、大サイズのブロックに対する向上した変換、逆変換の方法及びその装置に関する。
H.264及びMPEG(moving picture experts group)−4のような、現在国際ビデオコーディング標準で、ビデオ信号は、シーケンス、フレーム、スライス、マクロブロック及びブロックに階層的に分割され、ブロックは、最小処理ユニットになる。エンコード側面で、イントラ・フレーム予測またはインター・フレーム予測を介して、ブロックの予測残留エラーが獲得され、ブロック変換は、エネルギーが少数の係数に集中するように実行され、量子化、スキャニング、ランレングス・コーディング(run length coding)及びエントロピ・コーディングを介して、イメージデータは圧縮され、コーディングされたビットストリームに記録される。デコーディング側面で、処理手続きは、反対になる。まず、エントロピ・コーディングのブロック変換係数がビットストリームから抽出される。その後、逆量子化及び逆変換を介して、ブロックの予測残留エラーが再構成され、予測情報は、ブロックのビデオデータを再構成するために使用される。エンコーディング・デコーディング処理手続きで、変換モジュールは、ビデオ圧縮の基礎であり、変換性能は、コーデックの一般的な性能に直接的に影響を与える。
離散コサイン変換(DCT)は、MPEG−1及びH.261のような初期ビデオコーディング標準で採択された。1974年のDCTの提案以後、DCTは、イメージ分野及びビデオコーディング分野で広く使用された。変換ドメイン内のイメージ要素の相関性を除去し、高効率イメージ圧縮のための基盤を設けるので、その変換性能は、全ての次善変換(sub-optimal transform)のうちですぐれている。しかし、DCT変換行列は、浮動小数点数(floating point number)で表現されるため、大量の浮動小数点計算によって、多くのシステム資源が消耗される。変換効率を改善する一方、大サイズのブロックに対する変換を行うために、新しいDCT変換アルゴリズムの必要性が高まっている。
本発明が解決しようとする技術的課題は、さらに効率的なDCTを利用して、映像を変換、逆変換する方法及びその装置を提供するところにある。特に、本発明が解決しようとする技術的課題は、大サイズのDCT時の演算複雑度、並びにハードウェア具現時のコストを増大させる乗算演算の個数を減らしながら、類似したDCTを行う映像変換方法及びその装置と、映像の逆変換方法及びその装置とを提供するものである。
本発明の実施形態は、DCT行列の元素をスケーリングし、整数値を有するDCT行列を獲得し、DCT行列に基づいた変換アルゴリズムで行われる回転変換に該当する演算を、乗算演算の回数が減った代替的な演算を介して遂行することによって、演算複雑度を低下させる。
本発明によれば、大サイズのブロックに対する変換時及び逆変換時に、浮動小数点演算ではない整数基盤の演算過程を介して複雑度を低下させ、演算速度を速める映像の変換方法及び逆変換方法、並びにその装置を提供することができる。また、本発明によれば、DCT時及び逆変換時に遂行される乗算演算の回数を低減させることによって、演算複雑度を低下させる。
本発明の一実施形態による映像符号化装置を図示する図面である。 本発明の一実施形態による32ポイントDCTのフローチャートの一例である。 本発明の一実施形態による映像変換方法を示したフローチャートである。 本発明の一実施形態による32,16,8及び4ポイントDCT過程を再構成したフローチャートである。 図4のフローチャートに図示された各演算構成要素について説明するための参照図である。 図2の32ポイントDCT行列に含まれた回転変換演算過程について説明するための参照図である。 図4の図面符号440による演算過程について説明するための図面である。 図4の図面符号440による演算過程について説明するための図面である。 図4の図面符号440による演算過程について説明するための図面である。 本発明の一実施形態による映像逆変換装置の構成を示したブロック図である。 本発明の一実施形態による映像逆変換方法を示したフローチャートである。 本発明の一実施形態による32,16,8及び4ポイント逆離散コサイン変換過程を再構成したフローチャートである。
本発明の一実施形態による映像の変換方法は、N(Nは、整数)ポイント離散コサイン変換(DCT:discrete cosine transform)に利用される変換行列を構成する元素を、所定のスケーリング・ファクタを利用してスケーリングし、整数値を有するスケーリングされた元素を獲得する段階と、前記整数値を有するスケーリングされた元素から構成された整数変換行列を利用して、前記NポイントDCTを行う段階と、前記スケーリング・ファクタを利用して、前記NポイントDCT行列の結果値をデスケーリング(de-scaling)する段階と、を含むことを特徴とする。
本発明の一実施形態による映像の変換装置は、N(Nは、整数)ポイントDCTに利用される変換行列を構成する元素を、所定のスケーリング・ファクタを利用してスケーリングし、整数値を有するスケーリングされた元素を獲得し、前記整数値を有するスケーリングされた元素から構成された整数変換行列を利用して、前記NポイントDCTを行い、前記スケーリング・ファクタを利用して、前記NポイントDCT行列の結果値をデスケーリングする変換部を含むことを特徴とする。
本発明の一実施形態による映像の逆変換方法は、N(Nは、整数)ポイント逆離散コサイン変換に利用される逆変換行列を構成する元素を、所定のスケーリング・ファクタを利用してスケーリングし、整数値を有するスケーリングされた元素を獲得する段階と、前記整数値を有するスケーリングされた元素から構成された整数逆変換行列を利用して、前記Nポイント逆離散コサイン変換を行う段階と、前記スケーリング・ファクタを利用して、前記Nポイント逆離散コサイン変換行列の結果値をデスケーリングする段階と、を含むことを特徴とする。
本発明の一実施形態による映像の逆変換装置は、N(Nは、整数)ポイント逆離散コサイン変換に利用される逆変換行列を構成する元素を、所定のスケーリング・ファクタを利用してスケーリングし、整数値を有するスケーリングされた元素を獲得し、前記整数値を有するスケーリングされた元素から構成された整数逆変換行列を利用して、前記Nポイント逆離散コサイン変換を行い、前記スケーリング・ファクタを利用して、前記Nポイント逆離散コサイン変換行列の結果値をデスケーリングする逆変換部を含むことを特徴とする。
以下、添付された図面を参照し、本発明の望ましい実施形態について具体的に説明する。
図1は、本発明の一実施形態による映像符号化装置を図示している。図1を参照すれば、本発明の一実施形態による映像符号化装置100は、予測部110、減算部115、変換部120、量子化部130及びエントロピ符号化部140を含む。
予測部110は、入力映像を所定サイズのブロックに分割し、分割された各ブロックに対して、インター予測またはイントラ予測を介して予測ブロックを生成する。具体的には、予測部110は、以前に符号化された後で復元された参照ピクチャの所定探索範囲内で、現在ブロックと類似した領域を示す動きベクトルを生成する動き予測及び動き補償過程を介して、予測ブロックを生成するインター予測、及び現在ブロックに隣接した周辺ブロックのデータを利用して、予測ブロックを生成するイントラ予測を行う。
減算部115は、現在ブロックの予測ブロックから原映像データを減算した残差を生成する。
変換部120は、残差を周波数領域に変換する。特に、本発明の実施形態による変換部120は、従来4x4、8x8の相対的に小さいサイズについて定義されたDCT行列を拡張し、16x16以上の大サイズのブロックにも適用される。後述するように、本発明の一実施形態による変換部120は、N(Nは、整数)ポイントDCTに利用される変換行列を構成する元素を、所定のスケーリング・ファクタを利用してスケーリングし、整数値を有する元素から構成されたNポイントDCT行列を生成し、生成されたNポイントDCT行列を利用してNポイントDCTを行う。また、本発明の一実施形態による変換部120は、原NポイントDCT行列による結果値との差を考慮し、スケーリングされた元素を利用したNポイントDCT行列の結果値に対して、さらにスケーリング・ファクタを利用したデスケーリングを遂行する。後述するように、かようなスケーリング過程及びデスケーリング過程は、スケーリング・ファクタが2の指数乗(power of 2)の値を有する場合、シフト演算(>>,<<)で具現される。かようなシフト演算は、乗算演算に比べて簡単に具現され、乗算演算に比べて演算複雑度が低減される。従って、本発明の実施形態による変換部120は、大サイズのブロックに対するDCT時の演算複雑度を低下させながら、演算速度を速めることができる。また、本発明の一実施形態による変換部120は、NポイントDCT行列による演算過程で、必要な乗算演算の回数を低減させるために、回転変換に該当する演算を、乗算演算の回数が低減された代替演算を介して行うことによって、NポイントDCT過程に必要な全体乗算演算の回数を低減させ、全体的な演算複雑度を低下させる。
量子化部130は、変換された残差を量子化する。量子化部130は、量子化過程でスケーリング・ファクタを利用して、変換部120でスケーリングされて整数値を有する元素から構成されたNポイントDCT行列を利用して変換された結果値と、原NポイントDCT行列に基づいた結果値との差を補償するためのデスケーリング過程を遂行することができる。すなわち、変換部120で遂行されるデスケーリング過程は、量子化部130による量子化過程に統合され、これについては後述する。
エントロピ符号化部140は、量子化された映像データに対して可変長符号化を行い、ビットストリームを生成する。
以下、図1の変換部120で遂行される変換過程について具体的に説明する。
変換部120は、NxN(Nは、整数)入力ブロックに対して、列方向変換(column-wise transform)及び行方向変換(row-wise transform)を行い、NxN変換ブロックを生成する。NxN入力ブロックをInput、行方向のDCT変換行列をTransform_hor、列方向のDCT変換行列をTransform_ver、変換結果値をOutputとするならば、変換部120は、次の数式:Output=Transform_horxInputxTransform_verのようなNポイントDCT行列演算を遂行して変換結果値Outputを出力する。ここで、最初の行列乗算Transform_horxInputは、N×N入力ブロックであるInputの各行に対して、一次元水平方向NポイントDCTを行うことに該当し、Transform_horxInputにTransform_verを乗じることは、一次元Nポイント垂直方向DCTを行うことに該当する。行方向のDCT行列Transform_horと、列方向のDCT行列Transform_verは、互いに転置(transpose)行列関係である。以下の説明で、行方向及び列方向に対して遂行されるNポイントDCT行列について説明する。
NポイントDCT行列の(k,n)番目(k,nは、それぞれ0から(N−1)までの整数)に位置した元素をAknとすれば、NxN入力ブロックの変換のための垂直方向または水平方向のNポイントDCT行列の(k,n)番目の元素Aknは、次の数式(1)のように定義される。
Figure 2014523673
NポイントDCT行列と、Nポイント逆離散コサイン変換行列は、互いに転置関係にあるので、Nポイント逆離散コサイン変換行列の(k,n)番目の元素Bknは、次の数式(2)のように定義される。
Figure 2014523673
数式(1)及び(2)で、C及びiCは、C*iC=2/(N^2)を満足する係数値である。C及びiCを乗じる演算過程は、変換過程以後に、量子化過程と結合され、シフト演算として具現されるので、以下の説明では、Nポイント変換行列及びNポイント逆変換行列に含まれた
Figure 2014523673
成分を整数値で置き換える場合を中心に説明する。また、以下の説明で、πは、piと表現される。
図2は、本発明の一実施形態による32ポイントDCTのフローチャートの一例である。数式(1)で定義された元素から構成されたDCT行列は、図2に図示されたようなフローチャート200を介して具現される。
具体的には、図2を参照すれば、X0ないしX31は、32ポイントDCTの入力値を示す。Y0ないしY31は、32ポイントDCTによる結果値である。一方、Y0ないしY31を入力値であると仮定すれば、X0ないしX31は、32ポイント逆離散コサイン変換(IDCT)の出力値になる。すなわち、X0ないしX31は、32ポイントDCTの入力値を示すと同時に、32ポイントIDCTの出力値である。32ポイントDCT時に、データ処理方向は、左側から右側であり、32ポイントIDCT時に、データ処理方向は、右側から左側である。点で交差する2本のラインは、2個の数の加算を示す。「−」は、否定(negation)を示し、当該ラインを通過する値をXとすれば、−Xを出力する。各ラインの上の値R(θ)は、入力値をθほど回転変換を行う回転変換に該当する演算を示し、各ラインを介して入力される値に、cosθまたはsinθの値を乗じた値を加算したり、あるいは減算する演算を示す。図2の回転変換演算過程については、以下の図6を参照して詳細に説明する。
図2では、32ポイントDCT行列のフローチャートを図示したが、偶数番目及び奇数番目の入力に係わる部分を選択することによって、16ポイントDCTのフローチャートを獲得することができ、さらに16ポイントDCTのフローチャートのうち、偶数番目及び奇数番目の入力に係わる部分を選択することによって、8ポイントDCTのフローチャートを獲得することができる。同様に、図2のフローチャートから、4ポイントDCT及び2ポイントDCTのフローチャートを獲得することができる。
図2で、一部ラインに表示されたR(θ)は、入力値をθほど回転変換を行う演算であるということ示す。例えば、図2の図面符号210で図示された部分の演算過程を図6を参照して説明する。
図6は、図2の32ポイントDCT行列に含まれた回転変換演算過程について説明するための参照図である。図6を参照すれば、図2の図面符号210に図示された演算は、入力値[X1,X2]に対して、以下の数式:
Figure 2014523673
のような演算を介して、出力値[Y1,Y2]を出力するのである。かような演算は、(x1,x2)の値をθほど回転した値を出力する回転変換演算に該当する。
図2のフローチャートによって、NポイントDCTを行う場合、R(θ)によって、cosθ及びsinθと、入力された値との乗算演算が遂行される。θが、0、pi/2、pi/3、pi/6である特定の場合を除き、cosθ及びsinθは、無理数(irrational number)であるために、cosθ及びsinθを利用した乗算演算過程は、ハードウェアで具現するときに、複雑度を上昇させる。従って、本発明の一実施形態による変換部120は、DCT演算行列に含まれた元素に、所定のスケーリング・ファクタを乗じた後で四捨五入し、整数値を有する元素から構成されたDCT行列を生成し、DCT結果値を、さらにスケーリング・ファクタを利用して、デスケーリングする過程を遂行する。
以下、本発明の一実施形態によって、整数値を有する元素から構成されたDCT行列を生成する過程について具体的に説明する。
図3は、本発明の一実施形態による映像変換方法を示したフローチャートである。
図1及び図3を参照すれば、段階310で、変換部120は、NポイントDCT行列を構成する各元素に、所定のスケーリング・ファクタSを乗じた後で四捨五入し、整数値を有する元素を獲得する。
前述のように、NポイントDCT行列は、
Figure 2014523673
である成分を含む。変換部120は、かような
Figure 2014523673
に、所定のスケーリング・ファクタSを乗じた後で四捨五入して整数値を獲得する。int(x)(xは、実数)を、xを四捨五入した整数値、sqrt(x)をxの自乗根、Sをスケーリング・ファクタとすれば、変換部120によって、NポイントDCT行列に含まれた
Figure 2014523673
を整数値に変換した元素は、int(cos((2n+1)k)*sqrt(2.0)*S)と表現され、かような整数値に変換された元素int(cos((2n+1)k)*sqrt(2.0)*S)を、COS_((2n+1)k)_SQRT_2と示すと定義する。一例として、32ポイントDCT行列に含まれた
Figure 2014523673
に、スケーリング・ファクタSを乗じて四捨五入した整数値を獲得する場合、以下の表1で定義されているように、
Figure 2014523673
を整数値に変換した元素が定義される。
Figure 2014523673
Figure 2014523673
表1でSQRT_2は、
Figure 2014523673
で、kが0の値を有する場合、すなわち、
Figure 2014523673
を整数値に変換した元素を示す。表1では、スケーリング・ファクタSは、2^6、すなわち、64の値を有する場合、
Figure 2014523673
の代わりに利用される整数値を例示している。例えば、cos(7*pi/64)*64は、約60.2588の値を有し、それを四捨五入すれば60の値を有する。従って、変換部120は、cos(7*pi/64)*64の代わりに、cos(7*pi/64)*64を四捨五入した値であるCOS7_SQRT_2(=60)を利用して変換を行う。
変換部120は、このように、NポイントDCT行列の元素にスケーリング・ファクタSを乗じた後で四捨五入した値に対して、さらにスケーリング・ファクタSを利用した左向きシフト演算(<<)を行う。S_BITをlogSと定義すれば、変換部120は、COS_((2n+1)k)_SQRT_2を、さらにS_BITほど左向きシフト(<<)してNポイントDCT行列を獲得する。S=1<<S_BITであるので、COS_((2n+1)k)_SQRT_2を、さらにS_BITほど左向きシフト(<<)する演算は、結局、Sを乗じる演算に該当する。従って、本発明の一実施形態による変換部120は、NポイントDCT行列の元素にSを乗じた後で四捨五入した値に、さらにSを乗じることによって、結果としてS^2ほどNポイントDCT行列の元素をスケーリングすることになる。かようなスケーリング過程を介して、獲得された4ポイントDCT行列であるDCT_4x4[4][4]、8ポイントDCT行列であるDCT_8x8[8][8]、16ポイントDCT行列であるDCT_16x16[16][16]、32ポイントDCT行列であるDCT_32x32[32][32]を、表1に記載されたような記号を利用して表現すれば、以下の通りである。

DCT_4x4[4][4] = {
{ COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT},
{ COS8_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT },
{ COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT},
{ COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT }
};
DCT_8x8[8][8] = {
{ COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT
{ (COS12+COS20)<<S_BIT, (COS4+COS28)<<S_BIT, (COS4-COS28)<<S_BIT, (COS12-COS20)<<S_BIT,-((COS12-COS20)<<S_BIT),-((COS4-COS28)<<S_BIT),-((COS4+COS28)<<S_BIT),-((COS12+COS20)<<S_BIT)},
{ COS8_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT},
{ COS12*SQRT_2,-COS28*SQRT_2,-COS4*SQRT_2,-COS20*SQRT_2, COS20*SQRT_2, COS4*SQRT_2, COS28*SQRT_2,-COS12*SQRT_2},
{ COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT},
{ COS20*SQRT_2,-COS4*SQRT_2, COS28*SQRT_2, COS12*SQRT_2,-COS12*SQRT_2,-COS28*SQRT_2, COS4*SQRT_2,-COS20*SQRT_2},
{ COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT},
{ (COS12-COS20)<<S_BIT,-((COS4-COS28)<<S_BIT), (COS4+COS28)<<S_BIT,-((COS12+COS20)<<S_BIT), (COS12+COS20)<<S_BIT,-((COS4+COS28)<<S_BIT), (COS4-COS28)<<S_BIT,-((COS12-COS20)<<S_BIT)}
};

DCT_16x16[16][16] = {
{ COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT},
{ (COS14+COS18)<<S_BIT, (COS10+COS22)<<S_BIT, (COS6+COS26)<<S_BIT, (COS2+COS30)<<S_BIT, (COS2-COS30)<<S_BIT, (COS6-COS26)<<S_BIT, (COS10-COS22)<<S_BIT, (COS14-COS18)<<S_BIT, -(COS14-COS18)<<S_BIT,-(COS10-COS22)<<S_BIT,-(COS6-COS26)<<S_BIT,-(COS2-COS30)<<S_BIT,-(COS2+COS30)<<S_BIT,-(COS6+COS26)<<S_BIT,-(COS10+COS22)<<S_BIT,-(COS14+COS18)<<S_BIT},
{ ((COS12+COS20)<<S_BIT), ((COS4+COS28)<<S_BIT), ((COS4-COS28)<<S_BIT), ((COS12-COS20)<<S_BIT),-((COS12-COS20)<<S_BIT),-((COS4-COS28)<<S_BIT),-((COS4+COS28)<<S_BIT),-((COS12+COS20)<<S_BIT),-((COS12+COS20)<<S_BIT),-((COS4+COS28)<<S_BIT),-((COS4-COS28)<<S_BIT),-((COS12-COS20)<<S_BIT), ((COS12-COS20)<<S_BIT), ((COS4-COS28)<<S_BIT), ((COS4+COS28)<<S_BIT), ((COS12+COS20)<<S_BIT)},
{ (COS24_SQRT_2*COS18+COS8_SQRT_2*COS14), (COS10*COS8_SQRT_2-COS22*COS24_SQRT_2), (COS6*COS24_SQRT_2-COS8_SQRT_2*COS26),-(COS30*COS8_SQRT_2+COS2*COS24_SQRT_2),-(COS2*COS8_SQRT_2-COS24_SQRT_2*COS30),-(COS24_SQRT_2*COS26+COS8_SQRT_2*COS6),-(COS10*COS24_SQRT_2+COS22*COS8_SQRT_2),-(COS18*COS8_SQRT_2-COS14*COS24_SQRT_2), (COS18*COS8_SQRT_2-COS14*COS24_SQRT_2), (COS10*COS24_SQRT_2+COS22*COS8_SQRT_2), (COS24_SQRT_2*COS26+COS8_SQRT_2*COS6), (COS2*COS8_SQRT_2-COS24_SQRT_2*COS30), (COS30*COS8_SQRT_2+COS2*COS24_SQRT_2), -(COS6*COS24_SQRT_2-COS8_SQRT_2*COS26),-(COS10*COS8_SQRT_2-COS22*COS24_SQRT_2),-(COS24_SQRT_2*COS18+COS8_SQRT_2*COS14)},
{ COS8_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT},
{ (COS24_SQRT_2*COS14+COS8_SQRT_2*COS18), (COS8_SQRT_2*COS22-COS24_SQRT_2*COS10),-(COS8_SQRT_2*COS6-COS24_SQRT_2*COS26),-(COS24_SQRT_2*COS30+COS8_SQRT_2*COS2),-(COS24_SQRT_2*COS2-COS8_SQRT_2*COS30), (COS24_SQRT_2*COS6+COS8_SQRT_2*COS26), (COS22*COS24_SQRT_2+COS8_SQRT_2*COS10), (-COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),-(-COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),-(COS22*COS24_SQRT_2+COS8_SQRT_2*COS10),-(COS24_SQRT_2*COS6+COS8_SQRT_2*COS26), (COS24_SQRT_2*COS2-COS8_SQRT_2*COS30), (COS24_SQRT_2*COS30+COS8_SQRT_2*COS2), (COS8_SQRT_2*COS6-COS24_SQRT_2*COS26), -(COS8_SQRT_2*COS22-COS24_SQRT_2*COS10),-(COS24_SQRT_2*COS14+COS8_SQRT_2*COS18)},
{ COS12*SQRT_2,-COS28*SQRT_2,-COS4*SQRT_2,-COS20*SQRT_2, COS20*SQRT_2, COS4*SQRT_2, COS28*SQRT_2,-COS12*SQRT_2,-COS12*SQRT_2, COS28*SQRT_2, COS4*SQRT_2, COS20*SQRT_2,-COS20*SQRT_2,-COS4*SQRT_2,-COS28*SQRT_2, COS12*SQRT_2},
{ COS14*SQRT_2,-COS22*SQRT_2,-COS6*SQRT_2, COS30*SQRT_2, COS2*SQRT_2, COS26*SQRT_2,-COS10*SQRT_2,-COS18*SQRT_2, COS18*SQRT_2, COS10*SQRT_2,-COS26*SQRT_2,-COS2*SQRT_2, -COS30*SQRT_2, COS6*SQRT_2, COS22*SQRT_2,-COS14*SQRT_2},
{ COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT},
{ COS18*SQRT_2,-COS10*SQRT_2,-COS26*SQRT_2, COS2*SQRT_2, -COS30*SQRT_2,-COS6*SQRT_2, COS22*SQRT_2, COS14*SQRT_2,-COS14*SQRT_2,-COS22*SQRT_2, COS6*SQRT_2, COS30*SQRT_2,-COS2*SQRT_2, COS26*SQRT_2, COS10*SQRT_2,-COS18*SQRT_2},
{ COS20*SQRT_2,-COS4*SQRT_2, COS28*SQRT_2, COS12*SQRT_2,-COS12*SQRT_2,-COS28*SQRT_2, COS4*SQRT_2,-COS20*SQRT_2,-COS20*SQRT_2, COS4*SQRT_2,-COS28*SQRT_2,-COS12*SQRT_2, COS12*SQRT_2, COS28*SQRT_2,-COS4*SQRT_2, COS20*SQRT_2},
{ (-COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),-(COS22*COS24_SQRT_2+COS8_SQRT_2*COS10), (COS24_SQRT_2*COS6+COS8_SQRT_2*COS26), (COS24_SQRT_2*COS2-COS8_SQRT_2*COS30),-(COS24_SQRT_2*COS30+COS8_SQRT_2*COS2), (COS8_SQRT_2*COS6-COS24_SQRT_2*COS26), (COS8_SQRT_2*COS22-COS24_SQRT_2*COS10),-(COS24_SQRT_2*COS14+COS8_SQRT_2*COS18), (COS24_SQRT_2*COS14+COS8_SQRT_2*COS18), -(COS8_SQRT_2*COS22-COS24_SQRT_2*COS10),-(COS8_SQRT_2*COS6-COS24_SQRT_2*COS26), (COS24_SQRT_2*COS30+COS8_SQRT_2*COS2),-(COS24_SQRT_2*COS2-COS8_SQRT_2*COS30),-(COS24_SQRT_2*COS6+COS8_SQRT_2*COS26), (COS22*COS24_SQRT_2+COS8_SQRT_2*COS10),-(-COS24_SQRT_2*COS18+COS8_SQRT_2*COS14)},
{ COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT},
{ (COS18*COS8_SQRT_2-COS14*COS24_SQRT_2),-(COS10*COS24_SQRT_2+COS22*COS8_SQRT_2), (COS24_SQRT_2*COS26+COS8_SQRT_2*COS6),-(COS2*COS8_SQRT_2-COS24_SQRT_2*COS30), (COS30*COS8_SQRT_2+COS2*COS24_SQRT_2), (COS6*COS24_SQRT_2-COS8_SQRT_2*COS26),-(COS10*COS8_SQRT_2-COS22*COS24_SQRT_2), (COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),-(COS24_SQRT_2*COS18+COS8_SQRT_2*COS14), (COS10*COS8_SQRT_2-COS22*COS24_SQRT_2), -(COS6*COS24_SQRT_2-COS8_SQRT_2*COS26),-(COS30*COS8_SQRT_2+COS2*COS24_SQRT_2), (COS2*COS8_SQRT_2-COS24_SQRT_2*COS30),-(COS24_SQRT_2*COS26+COS8_SQRT_2*COS6),
(COS10*COS24_SQRT_2+COS22*COS8_SQRT_2),-(COS18*COS8_SQRT_2-COS14*COS24_SQRT_2)},
{ ((COS12-COS20)<<S_BIT),-((COS4-COS28)<<S_BIT), ((COS4+COS28)<<S_BIT),-((COS12+COS20)<<S_BIT), ((COS12+COS20)<<S_BIT),-((COS4+COS28)<<S_BIT), ((COS4-COS28)<<S_BIT),-((COS12-COS20)<<S_BIT),-((COS12-COS20)<<S_BIT), ((COS4-COS28)<<S_BIT),-((COS4+COS28)<<S_BIT), ((COS12+COS20)<<S_BIT),-((COS12+COS20)<<S_BIT), ((COS4+COS28)<<S_BIT),-((COS4-COS28)<<S_BIT), ((COS12-COS20)<<S_BIT)},
{ (COS14-COS18)<<S_BIT,-(COS10-COS22)<<S_BIT, (COS6-COS26)<<S_BIT,-(COS2-COS30)<<S_BIT, (COS2+COS30)<<S_BIT,-(COS6+COS26)<<S_BIT, (COS10+COS22)<<S_BIT,-(COS14+COS18)<<S_BIT, (COS14+COS18)<<S_BIT,-(COS10+COS22)<<S_BIT, (COS6+COS26)<<S_BIT,-(COS2+COS30)<<S_BIT, (COS2-COS30)<<S_BIT,-(COS6-COS26)<<S_BIT, (COS10-COS22)<<S_BIT, -(COS14-COS18)<<S_BIT}
};

DCT_32x32[32][32] = {
{ COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT},
{ COS16_SQRT_2*COS17 + COS16_SQRT_2*COS15, COS13*COS16_SQRT_2 + COS19*COS16_SQRT_2, COS16_SQRT_2*COS21 + COS16_SQRT_2*COS11, COS16_SQRT_2*COS9 + COS16_SQRT_2*COS23, COS16_SQRT_2*COS25 + COS16_SQRT_2*COS7, COS16_SQRT_2*COS5 + COS16_SQRT_2*COS27, COS16_SQRT_2*COS29 + COS16_SQRT_2*COS3, COS1*COS16_SQRT_2 + COS31*COS16_SQRT_2, COS1*COS16_SQRT_2 - COS16_SQRT_2*COS31, COS16_SQRT_2*COS3 - COS29*COS16_SQRT_2, COS5*COS16_SQRT_2 - COS16_SQRT_2*COS27, COS16_SQRT_2*COS7 - COS25*COS16_SQRT_2, COS9*COS16_SQRT_2 - COS16_SQRT_2*COS23, COS16_SQRT_2*COS11 - COS21*COS16_SQRT_2, COS13*COS16_SQRT_2 - COS16_SQRT_2*COS19, COS16_SQRT_2*COS15 - COS17*COS16_SQRT_2, COS17*COS16_SQRT_2 - COS16_SQRT_2*COS15, COS16_SQRT_2*COS19 - COS13*COS16_SQRT_2, COS21*COS16_SQRT_2 - COS16_SQRT_2*COS11, COS16_SQRT_2*COS23 - COS9*COS16_SQRT_2, COS25*COS16_SQRT_2 - COS16_SQRT_2*COS7, COS16_SQRT_2*COS27 - COS5*COS16_SQRT_2, COS29*COS16_SQRT_2 - COS16_SQRT_2*COS3, COS16_SQRT_2*COS31 - COS1*COS16_SQRT_2, - COS1*COS16_SQRT_2 - COS31*COS16_SQRT_2, - COS16_SQRT_2*COS29 - COS16_SQRT_2*COS3, - COS16_SQRT_2*COS5 - COS16_SQRT_2*COS27, - COS16_SQRT_2*COS25 - COS16_SQRT_2*COS7, - COS16_SQRT_2*COS9 - COS16_SQRT_2*COS23, - COS16_SQRT_2*COS21 - COS16_SQRT_2*COS11, - COS13*COS16_SQRT_2 - COS19*COS16_SQRT_2, - COS16_SQRT_2*COS17 - COS16_SQRT_2*COS15},
{ (COS14+COS18)<<S_BIT, (COS10+COS22)<<S_BIT, (COS6+COS26)<<S_BIT, (COS2+COS30)<<S_BIT, (COS2-COS30)<<S_BIT, (COS6-COS26)<<S_BIT, (COS10-COS22)<<S_BIT, (COS14-COS18)<<S_BIT, -(COS14-COS18)<<S_BIT,-(COS10-COS22)<<S_BIT,-(COS6-COS26)<<S_BIT,-(COS2-COS30)<<S_BIT,-(COS2+COS30)<<S_BIT,-(COS6+COS26)<<S_BIT,-(COS10+COS22)<<S_BIT,-(COS14+COS18)<<S_BIT,-(COS14+COS18)<<S_BIT,-(COS10+COS22)<<S_BIT,-(COS6+COS26)<<S_BIT,-(COS2+COS30)<<S_BIT,-(COS2-COS30)<<S_BIT,-(COS6-COS26)<<S_BIT,-(COS10-COS22)<<S_BIT, -(COS14-COS18)<<S_BIT, (COS14-COS18)<<S_BIT, (COS10-COS22)<<S_BIT, (COS6-COS26)<<S_BIT, (COS2-COS30)<<S_BIT, (COS2+COS30)<<S_BIT, (COS6+COS26)<<S_BIT, (COS10+COS22)<<S_BIT, (COS14+COS18)<<S_BIT},
{ COS12_SQRT_2*COS15 + COS17*COS20_SQRT_2, COS13*COS4_SQRT_2 + COS19*COS28_SQRT_2, COS4_SQRT_2*COS11 - COS21*COS28_SQRT_2, COS12_SQRT_2*COS9 - COS20_SQRT_2*COS23, COS20_SQRT_2*COS7 - COS12_SQRT_2*COS25, COS5*COS28_SQRT_2 - COS4_SQRT_2*COS27, - COS29*COS4_SQRT_2 - COS3*COS28_SQRT_2, - COS1*COS20_SQRT_2 - COS12_SQRT_2*COS31, COS31*COS20_SQRT_2 - COS1*COS12_SQRT_2, COS29*COS28_SQRT_2 - COS4_SQRT_2*COS3, - COS4_SQRT_2*COS5 - COS28_SQRT_2*COS27, - COS12_SQRT_2*COS7 - COS25*COS20_SQRT_2, - COS12_SQRT_2*COS23 - COS9*COS20_SQRT_2, - COS21*COS4_SQRT_2 - COS11*COS28_SQRT_2, COS13*COS28_SQRT_2 - COS4_SQRT_2*COS19, COS20_SQRT_2*COS15 - COS12_SQRT_2*COS17, COS12_SQRT_2*COS17 - COS20_SQRT_2*COS15, COS4_SQRT_2*COS19 - COS13*COS28_SQRT_2, COS21*COS4_SQRT_2 + COS11*COS28_SQRT_2, COS12_SQRT_2*COS23 + COS9*COS20_SQRT_2, COS12_SQRT_2*COS7 + COS25*COS20_SQRT_2, COS4_SQRT_2*COS5 + COS28_SQRT_2*COS27, COS4_SQRT_2*COS3 - COS29*COS28_SQRT_2, COS1*COS12_SQRT_2 - COS31*COS20_SQRT_2, COS1*COS20_SQRT_2 + COS12_SQRT_2*COS31, COS29*COS4_SQRT_2 + COS3*COS28_SQRT_2, COS4_SQRT_2*COS27 - COS5*COS28_SQRT_2, COS12_SQRT_2*COS25 - COS20_SQRT_2*COS7, COS20_SQRT_2*COS23 - COS12_SQRT_2*COS9, COS21*COS28_SQRT_2 - COS4_SQRT_2*COS11, - COS13*COS4_SQRT_2 - COS19*COS28_SQRT_2, - COS12_SQRT_2*COS15 - COS17*COS20_SQRT_2},
{ ((COS12+COS20)<<S_BIT), ((COS4+COS28)<<S_BIT), ((COS4-COS28)<<S_BIT), ((COS12-COS20)<<S_BIT),-((COS12-COS20)<<S_BIT),-((COS4-COS28)<<S_BIT),-((COS4+COS28)<<S_BIT),-((COS12+COS20)<<S_BIT),-((COS12+COS20)<<S_BIT),-((COS4+COS28)<<S_BIT),-((COS4-COS28)<<S_BIT),-((COS12-COS20)<<S_BIT), ((COS12-COS20)<<S_BIT), ((COS4-COS28)<<S_BIT), ((COS4+COS28)<<S_BIT), ((COS12+COS20)<<S_BIT), ((COS12+COS20)<<S_BIT), ((COS4+COS28)<<S_BIT), ((COS4-COS28)<<S_BIT), ((COS12-COS20)<<S_BIT),-((COS12-COS20)<<S_BIT),-((COS4-COS28)<<S_BIT),-((COS4+COS28)<<S_BIT),-((COS12+COS20)<<S_BIT),-((COS12+COS20)<<S_BIT),-((COS4+COS28)<<S_BIT),-((COS4-COS28)<<S_BIT),-((COS12-COS20)<<S_BIT), ((COS12-COS20)<<S_BIT), ((COS4-COS28)<<S_BIT), ((COS4+COS28)<<S_BIT), ((COS12+COS20)<<S_BIT)},
{ (COS17*COS4 - COS15*COS28) + (COS17*COS28 + COS4*COS15), (COS12*COS13 + COS20*COS19) + (COS12*COS19 - COS13*COS20), (COS12*COS21 + COS20*COS11) - (COS12*COS11 - COS21*COS20), (COS4*COS23 + COS9*COS28) - (COS4*COS9 - COS28*COS23), (COS25*COS4 - COS7*COS28) - (COS25*COS28 + COS4*COS7), (COS12*COS27 - COS5*COS20) - (COS12*COS5 + COS20*COS27), - (COS12*COS29 + COS20*COS3) - (COS12*COS3 - COS29*COS20), - (COS1*COS4 - COS31*COS28) - (COS1*COS28 + COS4*COS31), (COS1*COS28 + COS4*COS31) - (COS1*COS4 - COS31*COS28), (COS12*COS29 + COS20*COS3) - (COS12*COS3 - COS29*COS20), (COS12*COS5 + COS20*COS27) + (COS12*COS27 - COS5*COS20), (COS25*COS4 - COS7*COS28) + (COS25*COS28 + COS4*COS7), (COS4*COS9 - COS28*COS23) + (COS4*COS23 + COS9*COS28), (COS12*COS21 + COS20*COS11) + (COS12*COS11 - COS21*COS20), (COS12*COS13 + COS20*COS19) - (COS12*COS19 - COS13*COS20), (COS17*COS28 + COS4*COS15) - (COS17*COS4 - COS15*COS28), (COS17*COS4 - COS15*COS28) - (COS17*COS28 + COS4*COS15), (COS12*COS19 - COS13*COS20) - (COS12*COS13 + COS20*COS19), - (COS12*COS21 + COS20*COS11) - (COS12*COS11 - COS21*COS20), - (COS4*COS9 - COS28*COS23) - (COS4*COS23 + COS9*COS28), - (COS25*COS4 - COS7*COS28) - (COS25*COS28 + COS4*COS7), - (COS12*COS5 + COS20*COS27) - (COS12*COS27 - COS5*COS20), (COS12*COS3 - COS29*COS20) - (COS12*COS29 + COS20*COS3), (COS1*COS4 - COS31*COS28) - (COS1*COS28 + COS4*COS31), (COS1*COS4 - COS31*COS28) + (COS1*COS28 + COS4*COS31), (COS12*COS29 + COS20*COS3) + (COS12*COS3 - COS29*COS20), (COS12*COS5 + COS20*COS27) - (COS12*COS27 - COS5*COS20), (COS25*COS28 + COS4*COS7) - (COS25*COS4 - COS7*COS28), (COS4*COS9 - COS28*COS23) - (COS4*COS23 + COS9*COS28), (COS12*COS11 - COS21*COS20) - (COS12*COS21 + COS20*COS11), - (COS12*COS13 + COS20*COS19) - (COS12*COS19 - COS13*COS20), - (COS17*COS4 - COS15*COS28) - (COS17*COS28 + COS4*COS15)},
{ (COS24_SQRT_2*COS18+COS8_SQRT_2*COS14), (COS10*COS8_SQRT_2-COS22*COS24_SQRT_2), (COS6*COS24_SQRT_2-COS8_SQRT_2*COS26),-(COS30*COS8_SQRT_2+COS2*COS24_SQRT_2),-(COS2*COS8_SQRT_2-COS24_SQRT_2*COS30),-(COS24_SQRT_2*COS26+COS8_SQRT_2*COS6),-(COS10*COS24_SQRT_2+COS22*COS8_SQRT_2),-(COS18*COS8_SQRT_2-COS14*COS24_SQRT_2), (COS18*COS8_SQRT_2-COS14*COS24_SQRT_2), (COS10*COS24_SQRT_2+COS22*COS8_SQRT_2), (COS24_SQRT_2*COS26+COS8_SQRT_2*COS6), (COS2*COS8_SQRT_2-COS24_SQRT_2*COS30), (COS30*COS8_SQRT_2+COS2*COS24_SQRT_2), -(COS6*COS24_SQRT_2-COS8_SQRT_2*COS26),-(COS10*COS8_SQRT_2-COS22*COS24_SQRT_2),-(COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),-(COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),-(COS10*COS8_SQRT_2-COS22*COS24_SQRT_2), -(COS6*COS24_SQRT_2-COS8_SQRT_2*COS26), (COS30*COS8_SQRT_2+COS2*COS24_SQRT_2), (COS2*COS8_SQRT_2-COS24_SQRT_2*COS30), (COS24_SQRT_2*COS26+COS8_SQRT_2*COS6), (COS10*COS24_SQRT_2+COS22*COS8_SQRT_2), (COS18*COS8_SQRT_2-COS14*COS24_SQRT_2),-(COS18*COS8_SQRT_2-COS14*COS24_SQRT_2),-(COS10*COS24_SQRT_2+COS22*COS8_SQRT_2),-(COS24_SQRT_2*COS26+COS8_SQRT_2*COS6),-(COS2*COS8_SQRT_2-COS24_SQRT_2*COS30),-(COS30*COS8_SQRT_2+COS2*COS24_SQRT_2), (COS6*COS24_SQRT_2-COS8_SQRT_2*COS26), (COS10*COS8_SQRT_2-COS22*COS24_SQRT_2), (COS24_SQRT_2*COS18+COS8_SQRT_2*COS14)},
{ COS17*COS24_SQRT_2 + COS8_SQRT_2*COS15, COS13*COS8_SQRT_2 - COS19*COS24_SQRT_2, COS11*COS24_SQRT_2 - COS21*COS8_SQRT_2, - COS8_SQRT_2*COS23 - COS9*COS24_SQRT_2, - COS25*COS24_SQRT_2 - COS8_SQRT_2*COS7, COS27*COS24_SQRT_2 - COS5*COS8_SQRT_2, COS29*COS8_SQRT_2 - COS3*COS24_SQRT_2, COS1*COS24_SQRT_2 + COS8_SQRT_2*COS31, COS1*COS8_SQRT_2 - COS31*COS24_SQRT_2, COS29*COS24_SQRT_2 + COS8_SQRT_2*COS3, COS5*COS24_SQRT_2 + COS8_SQRT_2*COS27, COS25*COS8_SQRT_2 - COS7*COS24_SQRT_2, COS24_SQRT_2*COS23 - COS8_SQRT_2*COS9, - COS21*COS24_SQRT_2 - COS8_SQRT_2*COS11, - COS13*COS24_SQRT_2 - COS8_SQRT_2*COS19, COS15*COS24_SQRT_2 - COS17*COS8_SQRT_2, COS17*COS8_SQRT_2 - COS15*COS24_SQRT_2, COS13*COS24_SQRT_2 + COS8_SQRT_2*COS19, COS21*COS24_SQRT_2 + COS8_SQRT_2*COS11, COS8_SQRT_2*COS9 - COS24_SQRT_2*COS23, COS7*COS24_SQRT_2 - COS25*COS8_SQRT_2, - COS5*COS24_SQRT_2 - COS8_SQRT_2*COS27, - COS29*COS24_SQRT_2 - COS8_SQRT_2*COS3, COS31*COS24_SQRT_2 - COS1*COS8_SQRT_2, - COS1*COS24_SQRT_2 - COS8_SQRT_2*COS31, COS3*COS24_SQRT_2 - COS29*COS8_SQRT_2, COS5*COS8_SQRT_2 - COS27*COS24_SQRT_2, COS25*COS24_SQRT_2 + COS8_SQRT_2*COS7, COS8_SQRT_2*COS23 + COS9*COS24_SQRT_2, COS21*COS8_SQRT_2 - COS11*COS24_SQRT_2, COS19*COS24_SQRT_2 - COS13*COS8_SQRT_2, - COS17*COS24_SQRT_2 - COS8_SQRT_2*COS15},
{ COS8_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT},
{ COS17*COS8_SQRT_2 + COS15*COS24_SQRT_2, COS8_SQRT_2*COS19 - COS13*COS24_SQRT_2, COS21*COS24_SQRT_2 - COS8_SQRT_2*COS11, - COS8_SQRT_2*COS9 - COS24_SQRT_2*COS23, - COS25*COS8_SQRT_2 - COS7*COS24_SQRT_2, COS5*COS24_SQRT_2 - COS8_SQRT_2*COS27, COS8_SQRT_2*COS3 - COS29*COS24_SQRT_2, COS1*COS8_SQRT_2 + COS31*COS24_SQRT_2, COS1*COS24_SQRT_2 - COS8_SQRT_2*COS31, - COS29*COS8_SQRT_2 - COS3*COS24_SQRT_2, - COS5*COS8_SQRT_2 - COS27*COS24_SQRT_2, COS25*COS24_SQRT_2 - COS8_SQRT_2*COS7, COS8_SQRT_2*COS23 - COS9*COS24_SQRT_2, COS21*COS8_SQRT_2 + COS11*COS24_SQRT_2, COS13*COS8_SQRT_2 + COS19*COS24_SQRT_2, COS8_SQRT_2*COS15 - COS17*COS24_SQRT_2, COS17*COS24_SQRT_2 - COS8_SQRT_2*COS15, - COS13*COS8_SQRT_2 - COS19*COS24_SQRT_2, - COS21*COS8_SQRT_2 - COS11*COS24_SQRT_2, COS9*COS24_SQRT_2 - COS8_SQRT_2*COS23, COS8_SQRT_2*COS7 - COS25*COS24_SQRT_2, COS5*COS8_SQRT_2 + COS27*COS24_SQRT_2, COS29*COS8_SQRT_2 + COS3*COS24_SQRT_2, COS8_SQRT_2*COS31 - COS1*COS24_SQRT_2, - COS1*COS8_SQRT_2 - COS31*COS24_SQRT_2, COS29*COS24_SQRT_2 - COS8_SQRT_2*COS3, COS8_SQRT_2*COS27 - COS5*COS24_SQRT_2, COS25*COS8_SQRT_2 + COS7*COS24_SQRT_2, COS8_SQRT_2*COS9 + COS24_SQRT_2*COS23, COS8_SQRT_2*COS11 - COS21*COS24_SQRT_2, COS13*COS24_SQRT_2 - COS8_SQRT_2*COS19, - COS17*COS8_SQRT_2 - COS15*COS24_SQRT_2},
{ (COS24_SQRT_2*COS14+COS8_SQRT_2*COS18), (COS8_SQRT_2*COS22-COS24_SQRT_2*COS10),-(COS8_SQRT_2*COS6-COS24_SQRT_2*COS26),-(COS24_SQRT_2*COS30+COS8_SQRT_2*COS2),-(COS24_SQRT_2*COS2-COS8_SQRT_2*COS30), (COS24_SQRT_2*COS6+COS8_SQRT_2*COS26), (COS22*COS24_SQRT_2+COS8_SQRT_2*COS10), (-COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),-(-COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),-(COS22*COS24_SQRT_2+COS8_SQRT_2*COS10),-(COS24_SQRT_2*COS6+COS8_SQRT_2*COS26), (COS24_SQRT_2*COS2-COS8_SQRT_2*COS30), (COS24_SQRT_2*COS30+COS8_SQRT_2*COS2), (COS8_SQRT_2*COS6-COS24_SQRT_2*COS26), -(COS8_SQRT_2*COS22-COS24_SQRT_2*COS10),-(COS24_SQRT_2*COS14+COS8_SQRT_2*COS18),-(COS24_SQRT_2*COS14+COS8_SQRT_2*COS18), -(COS8_SQRT_2*COS22-COS24_SQRT_2*COS10), (COS8_SQRT_2*COS6-COS24_SQRT_2*COS26), (COS24_SQRT_2*COS30+COS8_SQRT_2*COS2), (COS24_SQRT_2*COS2-COS8_SQRT_2*COS30),-(COS24_SQRT_2*COS6+COS8_SQRT_2*COS26),-(COS22*COS24_SQRT_2+COS8_SQRT_2*COS10),-(-COS24_SQRT_2*COS18+COS8_SQRT_2*COS14), (-COS24_SQRT_2*COS18+COS8_SQRT_2*COS14), (COS22*COS24_SQRT_2+COS8_SQRT_2*COS10), (COS24_SQRT_2*COS6+COS8_SQRT_2*COS26),-(COS24_SQRT_2*COS2-COS8_SQRT_2*COS30),-(COS24_SQRT_2*COS30+COS8_SQRT_2*COS2),-(COS8_SQRT_2*COS6-COS24_SQRT_2*COS26), (COS8_SQRT_2*COS22-COS24_SQRT_2*COS10), (COS24_SQRT_2*COS14+COS8_SQRT_2*COS18)},
{ COS17*COS28_SQRT_2 + COS4_SQRT_2*COS15, COS13*COS20_SQRT_2 - COS12_SQRT_2*COS19, - COS12_SQRT_2*COS21 - COS20_SQRT_2*COS11, COS28_SQRT_2*COS23 - COS4_SQRT_2*COS9, COS25*COS4_SQRT_2 - COS7*COS28_SQRT_2, COS12_SQRT_2*COS5 + COS20_SQRT_2*COS27, COS12_SQRT_2*COS3 - COS29*COS20_SQRT_2, - COS1*COS28_SQRT_2 - COS4_SQRT_2*COS31, COS31*COS28_SQRT_2 - COS1*COS4_SQRT_2, - COS12_SQRT_2*COS29 - COS20_SQRT_2*COS3, COS5*COS20_SQRT_2 - COS12_SQRT_2*COS27, COS25*COS28_SQRT_2 + COS4_SQRT_2*COS7, COS4_SQRT_2*COS23 + COS9*COS28_SQRT_2, COS21*COS20_SQRT_2 - COS12_SQRT_2*COS11, - COS12_SQRT_2*COS13 - COS20_SQRT_2*COS19, COS15*COS28_SQRT_2 - COS17*COS4_SQRT_2, COS17*COS4_SQRT_2 - COS15*COS28_SQRT_2, COS12_SQRT_2*COS13 + COS20_SQRT_2*COS19, COS12_SQRT_2*COS11 - COS21*COS20_SQRT_2, - COS4_SQRT_2*COS23 - COS9*COS28_SQRT_2, - COS25*COS28_SQRT_2 - COS4_SQRT_2*COS7, COS12_SQRT_2*COS27 - COS5*COS20_SQRT_2, COS12_SQRT_2*COS29 + COS20_SQRT_2*COS3, COS1*COS4_SQRT_2 - COS31*COS28_SQRT_2, COS1*COS28_SQRT_2 + COS4_SQRT_2*COS31, COS29*COS20_SQRT_2 - COS12_SQRT_2*COS3, - COS12_SQRT_2*COS5 - COS20_SQRT_2*COS27, COS7*COS28_SQRT_2 - COS25*COS4_SQRT_2, COS4_SQRT_2*COS9 - COS28_SQRT_2*COS23, COS12_SQRT_2*COS21 + COS20_SQRT_2*COS11, COS12_SQRT_2*COS19 - COS13*COS20_SQRT_2, - COS17*COS28_SQRT_2 - COS4_SQRT_2*COS15},
{ COS12*SQRT_2,-COS28*SQRT_2,-COS4*SQRT_2,-COS20*SQRT_2, COS20*SQRT_2, COS4*SQRT_2, COS28*SQRT_2,-COS12*SQRT_2,-COS12*SQRT_2, COS28*SQRT_2, COS4*SQRT_2, COS20*SQRT_2,-COS20*SQRT_2,-COS4*SQRT_2,-COS28*SQRT_2, COS12*SQRT_2, COS12*SQRT_2,-COS28*SQRT_2,-COS4*SQRT_2,-COS20*SQRT_2, COS20*SQRT_2, COS4*SQRT_2, COS28*SQRT_2,-COS12*SQRT_2,-COS12*SQRT_2, COS28*SQRT_2, COS4*SQRT_2, COS20*SQRT_2,-COS20*SQRT_2,-COS4*SQRT_2,-COS28*SQRT_2, COS12*SQRT_2},
{((COS12-COS20)*COS15+(COS12+COS20)*COS17),-((COS28-COS4)*COS19+(COS4+COS28)*COS13),-((COS4+COS28)*COS11-(COS28-COS4)*COS21),-(-(COS12-COS20)*COS9+(COS12+COS20)*COS23), (-(COS12-COS20)*COS25+(COS12+COS20)*COS7), (-(COS28-COS4)*COS5+(COS4+COS28)*COS27),-(-(COS28-COS4)*COS3-(COS4+COS28)*COS29),-((COS12-COS20)*COS31+(COS12+COS20)*COS1),-((COS12-COS20)*COS1-(COS12+COS20)*COS31), (-(COS28-COS4)*COS29+(COS4+COS28)*COS3), ((COS28-COS4)*COS27+(COS4+COS28)*COS5),-((COS12-COS20)*COS7+(COS12+COS20)*COS25),-((COS12-COS20)*COS23+(COS12+COS20)*COS9), -(-(COS28-COS4)*COS11-(COS4+COS28)*COS21), (-(COS28-COS4)*COS13+(COS4+COS28)*COS19), (-(COS12-COS20)*COS17+(COS12+COS20)*COS15),-(-(COS12-COS20)*COS17+(COS12+COS20)*COS15),-(-(COS28-COS4)*COS13+(COS4+COS28)*COS19), (-(COS28-COS4)*COS11-(COS4+COS28)*COS21), ((COS12-COS20)*COS23+(COS12+COS20)*COS9), ((COS12-COS20)*COS7+(COS12+COS20)*COS25),-((COS28-COS4)*COS27+(COS4+COS28)*COS5),-(-(COS28-COS4)*COS29+(COS4+COS28)*COS3), ((COS12-COS20)*COS1-(COS12+COS20)*COS31), ((COS12-COS20)*COS31+(COS12+COS20)*COS1), (-(COS28-COS4)*COS3-(COS4+COS28)*COS29),-(-(COS28-COS4)*COS5+(COS4+COS28)*COS27),-(-(COS12-COS20)*COS25+(COS12+COS20)*COS7), (-(COS12-COS20)*COS9+(COS12+COS20)*COS23), ((COS4+COS28)*COS11-(COS28-COS4)*COS21), ((COS28-COS4)*COS19+(COS4+COS28)*COS13),-((COS12-COS20)*COS15+(COS12+COS20)*COS17)},
{ COS14*SQRT_2,-COS22*SQRT_2,-COS6*SQRT_2, COS30*SQRT_2, COS2*SQRT_2, COS26*SQRT_2,-COS10*SQRT_2,-COS18*SQRT_2, COS18*SQRT_2, COS10*SQRT_2,-COS26*SQRT_2,-COS2*SQRT_2, -COS30*SQRT_2, COS6*SQRT_2, COS22*SQRT_2,-COS14*SQRT_2,-COS14*SQRT_2, COS22*SQRT_2, COS6*SQRT_2, -COS30*SQRT_2,-COS2*SQRT_2,-COS26*SQRT_2, COS10*SQRT_2, COS18*SQRT_2,-COS18*SQRT_2,-COS10*SQRT_2, COS26*SQRT_2, COS2*SQRT_2, COS30*SQRT_2,-COS6*SQRT_2,-COS22*SQRT_2, COS14*SQRT_2},
{ SQRT_2*COS15, -SQRT_2*COS19, -SQRT_2*COS11, SQRT_2*COS23, SQRT_2*COS7, -SQRT_2*COS27, -SQRT_2*COS3, SQRT_2*COS31, SQRT_2*COS1, SQRT_2*COS29, -SQRT_2*COS5, -SQRT_2*COS25, SQRT_2*COS9, SQRT_2*COS21, -SQRT_2*COS13, -SQRT_2*COS17, SQRT_2*COS17, SQRT_2*COS13, -SQRT_2*COS21, -SQRT_2*COS9, SQRT_2*COS25, SQRT_2*COS5, -SQRT_2*COS29, -SQRT_2*COS1, -SQRT_2*COS31, SQRT_2*COS3, SQRT_2*COS27, -SQRT_2*COS7, -SQRT_2*COS23, SQRT_2*COS11, SQRT_2*COS19, -SQRT_2*COS15},
{ COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT, COS16_SQRT_2<<S_BIT},
{ SQRT_2*COS17, -SQRT_2*COS13, -SQRT_2*COS21, SQRT_2*COS9, SQRT_2*COS25, -SQRT_2*COS5, -SQRT_2*COS29, SQRT_2*COS1, -SQRT_2*COS31, -SQRT_2*COS3, SQRT_2*COS27, SQRT_2*COS7, -SQRT_2*COS23, -SQRT_2*COS11, SQRT_2*COS19, SQRT_2*COS15, -SQRT_2*COS15, -SQRT_2*COS19, SQRT_2*COS11, SQRT_2*COS23, -SQRT_2*COS7, -SQRT_2*COS27, SQRT_2*COS3, SQRT_2*COS31, -SQRT_2*COS1, SQRT_2*COS29, SQRT_2*COS5, -SQRT_2*COS25, -SQRT_2*COS9, SQRT_2*COS21, SQRT_2*COS13, -SQRT_2*COS17},
{ COS18*SQRT_2,-COS10*SQRT_2,-COS26*SQRT_2, COS2*SQRT_2, -COS30*SQRT_2,-COS6*SQRT_2, COS22*SQRT_2, COS14*SQRT_2,-COS14*SQRT_2,-COS22*SQRT_2, COS6*SQRT_2, COS30*SQRT_2,-COS2*SQRT_2, COS26*SQRT_2, COS10*SQRT_2,-COS18*SQRT_2,-COS18*SQRT_2, COS10*SQRT_2, COS26*SQRT_2,-COS2*SQRT_2, COS30*SQRT_2, COS6*SQRT_2,-COS22*SQRT_2,-COS14*SQRT_2, COS14*SQRT_2, COS22*SQRT_2,-COS6*SQRT_2, -COS30*SQRT_2, COS2*SQRT_2,-COS26*SQRT_2,-COS10*SQRT_2, COS18*SQRT_2},
{ (-(COS12-COS20)*COS17+(COS12+COS20)*COS15),-(-(COS28-COS4)*COS13+(COS4+COS28)*COS19), -(-(COS28-COS4)*COS11-(COS4+COS28)*COS21), ((COS12-COS20)*COS23+(COS12+COS20)*COS9),-((COS12-COS20)*COS7+(COS12+COS20)*COS25),-((COS28-COS4)*COS27+(COS4+COS28)*COS5), (-(COS28-COS4)*COS29+(COS4+COS28)*COS3), ((COS12-COS20)*COS1-(COS12+COS20)*COS31),-((COS12-COS20)*COS31+(COS12+COS20)*COS1), (-(COS28-COS4)*COS3-(COS4+COS28)*COS29), (-(COS28-COS4)*COS5+(COS4+COS28)*COS27),-(-(COS12-COS20)*COS25+(COS12+COS20)*COS7),-(-(COS12-COS20)*COS9+(COS12+COS20)*COS23), ((COS4+COS28)*COS11-(COS28-COS4)*COS21),-((COS28-COS4)*COS19+(COS4+COS28)*COS13),-((COS12-COS20)*COS15+(COS12+COS20)*COS17), ((COS12-COS20)*COS15+(COS12+COS20)*COS17), ((COS28-COS4)*COS19+(COS4+COS28)*COS13),-((COS4+COS28)*COS11-(COS28-COS4)*COS21), (-(COS12-COS20)*COS9+(COS12+COS20)*COS23), (-(COS12-COS20)*COS25+(COS12+COS20)*COS7),-(-(COS28-COS4)*COS5+(COS4+COS28)*COS27),-(-(COS28-COS4)*COS3-(COS4+COS28)*COS29), ((COS12-COS20)*COS31+(COS12+COS20)*COS1),-((COS12-COS20)*COS1-(COS12+COS20)*COS31),-(-(COS28-COS4)*COS29+(COS4+COS28)*COS3), ((COS28-COS4)*COS27+(COS4+COS28)*COS5), ((COS12-COS20)*COS7+(COS12+COS20)*COS25),-((COS12-COS20)*COS23+(COS12+COS20)*COS9), (-(COS28-COS4)*COS11-(COS4+COS28)*COS21), (-(COS28-COS4)*COS13+(COS4+COS28)*COS19),-(-(COS12-COS20)*COS17+(COS12+COS20)*COS15)},
{ COS20*SQRT_2,-COS4*SQRT_2, COS28*SQRT_2, COS12*SQRT_2,-COS12*SQRT_2,-COS28*SQRT_2, COS4*SQRT_2,-COS20*SQRT_2,-COS20*SQRT_2, COS4*SQRT_2,-COS28*SQRT_2,-COS12*SQRT_2, COS12*SQRT_2, COS28*SQRT_2,-COS4*SQRT_2, COS20*SQRT_2, COS20*SQRT_2,-COS4*SQRT_2, COS28*SQRT_2, COS12*SQRT_2,-COS12*SQRT_2,-COS28*SQRT_2, COS4*SQRT_2,-COS20*SQRT_2,-COS20*SQRT_2, COS4*SQRT_2,-COS28*SQRT_2,-COS12*SQRT_2, COS12*SQRT_2, COS28*SQRT_2,-COS4*SQRT_2, COS20*SQRT_2},
{ COS17*COS4_SQRT_2 - COS15*COS28_SQRT_2, - COS12_SQRT_2*COS13 - COS20_SQRT_2*COS19, COS12_SQRT_2*COS11 - COS21*COS20_SQRT_2, COS4_SQRT_2*COS23 + COS9*COS28_SQRT_2, - COS25*COS28_SQRT_2 - COS4_SQRT_2*COS7, COS5*COS20_SQRT_2 - COS12_SQRT_2*COS27, COS12_SQRT_2*COS29 + COS20_SQRT_2*COS3, COS31*COS28_SQRT_2 - COS1*COS4_SQRT_2, COS1*COS28_SQRT_2 + COS4_SQRT_2*COS31, COS12_SQRT_2*COS3 - COS29*COS20_SQRT_2, - COS12_SQRT_2*COS5 - COS20_SQRT_2*COS27, COS25*COS4_SQRT_2 - COS7*COS28_SQRT_2, COS4_SQRT_2*COS9 - COS28_SQRT_2*COS23, - COS12_SQRT_2*COS21 - COS20_SQRT_2*COS11, COS12_SQRT_2*COS19 - COS13*COS20_SQRT_2, COS17*COS28_SQRT_2 + COS4_SQRT_2*COS15, - COS17*COS28_SQRT_2 - COS4_SQRT_2*COS15, COS13*COS20_SQRT_2 - COS12_SQRT_2*COS19, COS12_SQRT_2*COS21 + COS20_SQRT_2*COS11, COS28_SQRT_2*COS23 - COS4_SQRT_2*COS9, COS7*COS28_SQRT_2 - COS25*COS4_SQRT_2, COS12_SQRT_2*COS5 + COS20_SQRT_2*COS27, COS29*COS20_SQRT_2 - COS12_SQRT_2*COS3, - COS1*COS28_SQRT_2 - COS4_SQRT_2*COS31, COS1*COS4_SQRT_2 - COS31*COS28_SQRT_2, - COS12_SQRT_2*COS29 - COS20_SQRT_2*COS3, COS12_SQRT_2*COS27 - COS5*COS20_SQRT_2, COS25*COS28_SQRT_2 + COS4_SQRT_2*COS7, - COS4_SQRT_2*COS23 - COS9*COS28_SQRT_2, COS21*COS20_SQRT_2 - COS12_SQRT_2*COS11, COS12_SQRT_2*COS13 + COS20_SQRT_2*COS19, COS15*COS28_SQRT_2 - COS17*COS4_SQRT_2},
{ (-COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),-(COS22*COS24_SQRT_2+COS8_SQRT_2*COS10), (COS24_SQRT_2*COS6+COS8_SQRT_2*COS26), (COS24_SQRT_2*COS2-COS8_SQRT_2*COS30),-(COS24_SQRT_2*COS30+COS8_SQRT_2*COS2), (COS8_SQRT_2*COS6-COS24_SQRT_2*COS26), (COS8_SQRT_2*COS22-COS24_SQRT_2*COS10),-(COS24_SQRT_2*COS14+COS8_SQRT_2*COS18), (COS24_SQRT_2*COS14+COS8_SQRT_2*COS18), -(COS8_SQRT_2*COS22-COS24_SQRT_2*COS10),-(COS8_SQRT_2*COS6-COS24_SQRT_2*COS26), (COS24_SQRT_2*COS30+COS8_SQRT_2*COS2),-(COS24_SQRT_2*COS2-COS8_SQRT_2*COS30),-(COS24_SQRT_2*COS6+COS8_SQRT_2*COS26), (COS22*COS24_SQRT_2+COS8_SQRT_2*COS10),-(-COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),-(-COS24_SQRT_2*COS18+COS8_SQRT_2*COS14), (COS22*COS24_SQRT_2+COS8_SQRT_2*COS10),-(COS24_SQRT_2*COS6+COS8_SQRT_2*COS26),-(COS24_SQRT_2*COS2-COS8_SQRT_2*COS30), (COS24_SQRT_2*COS30+COS8_SQRT_2*COS2),-(COS8_SQRT_2*COS6-COS24_SQRT_2*COS26), -(COS8_SQRT_2*COS22-COS24_SQRT_2*COS10), (COS24_SQRT_2*COS14+COS8_SQRT_2*COS18),-(COS24_SQRT_2*COS14+COS8_SQRT_2*COS18), (COS8_SQRT_2*COS22-COS24_SQRT_2*COS10), (COS8_SQRT_2*COS6-COS24_SQRT_2*COS26),-(COS24_SQRT_2*COS30+COS8_SQRT_2*COS2), (COS24_SQRT_2*COS2-COS8_SQRT_2*COS30), (COS24_SQRT_2*COS6+COS8_SQRT_2*COS26),-(COS22*COS24_SQRT_2+COS8_SQRT_2*COS10), (-COS24_SQRT_2*COS18+COS8_SQRT_2*COS14)},
{ COS8_SQRT_2*COS15 - COS17*COS24_SQRT_2, - COS13*COS8_SQRT_2 - COS19*COS24_SQRT_2, COS21*COS8_SQRT_2 + COS11*COS24_SQRT_2, COS9*COS24_SQRT_2 - COS8_SQRT_2*COS23, COS25*COS24_SQRT_2 - COS8_SQRT_2*COS7, COS5*COS8_SQRT_2 + COS27*COS24_SQRT_2, - COS29*COS8_SQRT_2 - COS3*COS24_SQRT_2, COS8_SQRT_2*COS31 - COS1*COS24_SQRT_2, COS1*COS8_SQRT_2 + COS31*COS24_SQRT_2, COS29*COS24_SQRT_2 - COS8_SQRT_2*COS3, COS5*COS24_SQRT_2 - COS8_SQRT_2*COS27, COS25*COS8_SQRT_2 + COS7*COS24_SQRT_2, - COS8_SQRT_2*COS9 - COS24_SQRT_2*COS23, COS8_SQRT_2*COS11 - COS21*COS24_SQRT_2, COS8_SQRT_2*COS19 - COS13*COS24_SQRT_2, - COS17*COS8_SQRT_2 - COS15*COS24_SQRT_2, COS17*COS8_SQRT_2 + COS15*COS24_SQRT_2, COS13*COS24_SQRT_2 - COS8_SQRT_2*COS19, COS21*COS24_SQRT_2 - COS8_SQRT_2*COS11, COS8_SQRT_2*COS9 + COS24_SQRT_2*COS23, - COS25*COS8_SQRT_2 - COS7*COS24_SQRT_2, COS8_SQRT_2*COS27 - COS5*COS24_SQRT_2, COS8_SQRT_2*COS3 - COS29*COS24_SQRT_2, - COS1*COS8_SQRT_2 - COS31*COS24_SQRT_2, COS1*COS24_SQRT_2 - COS8_SQRT_2*COS31, COS29*COS8_SQRT_2 + COS3*COS24_SQRT_2, - COS5*COS8_SQRT_2 - COS27*COS24_SQRT_2, COS8_SQRT_2*COS7 - COS25*COS24_SQRT_2, COS8_SQRT_2*COS23 - COS9*COS24_SQRT_2, - COS21*COS8_SQRT_2 - COS11*COS24_SQRT_2, COS13*COS8_SQRT_2 + COS19*COS24_SQRT_2, COS17*COS24_SQRT_2 - COS8_SQRT_2*COS15},
{ COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT, COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT, COS24_SQRT_2<<S_BIT},
{ COS17*COS8_SQRT_2 - COS15*COS24_SQRT_2, - COS13*COS24_SQRT_2 - COS8_SQRT_2*COS19, COS21*COS24_SQRT_2 + COS8_SQRT_2*COS11, COS24_SQRT_2*COS23 - COS8_SQRT_2*COS9, COS7*COS24_SQRT_2 - COS25*COS8_SQRT_2, COS5*COS24_SQRT_2 + COS8_SQRT_2*COS27, - COS29*COS24_SQRT_2 - COS8_SQRT_2*COS3, COS1*COS8_SQRT_2 - COS31*COS24_SQRT_2, - COS1*COS24_SQRT_2 - COS8_SQRT_2*COS31, COS29*COS8_SQRT_2 - COS3*COS24_SQRT_2, COS5*COS8_SQRT_2 - COS27*COS24_SQRT_2, - COS25*COS24_SQRT_2 - COS8_SQRT_2*COS7, COS8_SQRT_2*COS23 + COS9*COS24_SQRT_2, COS11*COS24_SQRT_2 - COS21*COS8_SQRT_2, COS19*COS24_SQRT_2 - COS13*COS8_SQRT_2, COS17*COS24_SQRT_2 + COS8_SQRT_2*COS15, - COS17*COS24_SQRT_2 - COS8_SQRT_2*COS15, COS13*COS8_SQRT_2 - COS19*COS24_SQRT_2, COS21*COS8_SQRT_2 - COS11*COS24_SQRT_2, - COS8_SQRT_2*COS23 - COS9*COS24_SQRT_2, COS25*COS24_SQRT_2 + COS8_SQRT_2*COS7, COS27*COS24_SQRT_2 - COS5*COS8_SQRT_2, COS3*COS24_SQRT_2 - COS29*COS8_SQRT_2, COS1*COS24_SQRT_2 + COS8_SQRT_2*COS31, COS31*COS24_SQRT_2 - COS1*COS8_SQRT_2, COS29*COS24_SQRT_2 + COS8_SQRT_2*COS3, - COS5*COS24_SQRT_2 - COS8_SQRT_2*COS27, COS25*COS8_SQRT_2 - COS7*COS24_SQRT_2, COS8_SQRT_2*COS9 - COS24_SQRT_2*COS23, - COS21*COS24_SQRT_2 - COS8_SQRT_2*COS11, COS13*COS24_SQRT_2 + COS8_SQRT_2*COS19, COS15*COS24_SQRT_2 - COS17*COS8_SQRT_2},
{ (COS18*COS8_SQRT_2-COS14*COS24_SQRT_2),-(COS10*COS24_SQRT_2+COS22*COS8_SQRT_2), (COS24_SQRT_2*COS26+COS8_SQRT_2*COS6),-(COS2*COS8_SQRT_2-COS24_SQRT_2*COS30), (COS30*COS8_SQRT_2+COS2*COS24_SQRT_2), (COS6*COS24_SQRT_2-COS8_SQRT_2*COS26),-(COS10*COS8_SQRT_2-COS22*COS24_SQRT_2), (COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),-(COS24_SQRT_2*COS18+COS8_SQRT_2*COS14), (COS10*COS8_SQRT_2-COS22*COS24_SQRT_2), -(COS6*COS24_SQRT_2-COS8_SQRT_2*COS26),-(COS30*COS8_SQRT_2+COS2*COS24_SQRT_2), (COS2*COS8_SQRT_2-COS24_SQRT_2*COS30),-(COS24_SQRT_2*COS26+COS8_SQRT_2*COS6), (COS10*COS24_SQRT_2+COS22*COS8_SQRT_2),-(COS18*COS8_SQRT_2-COS14*COS24_SQRT_2),-(COS18*COS8_SQRT_2-COS14*COS24_SQRT_2), (COS10*COS24_SQRT_2+COS22*COS8_SQRT_2),-(COS24_SQRT_2*COS26+COS8_SQRT_2*COS6), (COS2*COS8_SQRT_2-COS24_SQRT_2*COS30),-(COS30*COS8_SQRT_2+COS2*COS24_SQRT_2), -(COS6*COS24_SQRT_2-COS8_SQRT_2*COS26), (COS10*COS8_SQRT_2-COS22*COS24_SQRT_2),-(COS24_SQRT_2*COS18+COS8_SQRT_2*COS14), (COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),-(COS10*COS8_SQRT_2-COS22*COS24_SQRT_2), (COS6*COS24_SQRT_2-COS8_SQRT_2*COS26), (COS30*COS8_SQRT_2+COS2*COS24_SQRT_2),-(COS2*COS8_SQRT_2-COS24_SQRT_2*COS30), (COS24_SQRT_2*COS26+COS8_SQRT_2*COS6),-(COS10*COS24_SQRT_2+COS22*COS8_SQRT_2), (COS18*COS8_SQRT_2-COS14*COS24_SQRT_2)},
{ (COS17*COS28 + COS4*COS15) - (COS17*COS4 - COS15*COS28), (COS12*COS19 - COS13*COS20) - (COS12*COS13 + COS20*COS19), (COS12*COS21 + COS20*COS11) + (COS12*COS11 - COS21*COS20), - (COS4*COS9 - COS28*COS23) - (COS4*COS23 + COS9*COS28), (COS25*COS4 - COS7*COS28) + (COS25*COS28 + COS4*COS7), - (COS12*COS5 + COS20*COS27) - (COS12*COS27 - COS5*COS20), (COS12*COS29 + COS20*COS3) - (COS12*COS3 - COS29*COS20), (COS1*COS4 - COS31*COS28) - (COS1*COS28 + COS4*COS31), - (COS1*COS4 - COS31*COS28) - (COS1*COS28 + COS4*COS31), (COS12*COS29 + COS20*COS3) + (COS12*COS3 - COS29*COS20), (COS12*COS27 - COS5*COS20) - (COS12*COS5 + COS20*COS27), (COS25*COS28 + COS4*COS7) - (COS25*COS4 - COS7*COS28), (COS4*COS23 + COS9*COS28) - (COS4*COS9 - COS28*COS23), (COS12*COS11 - COS21*COS20) - (COS12*COS21 + COS20*COS11), (COS12*COS13 + COS20*COS19) + (COS12*COS19 - COS13*COS20), - (COS17*COS4 - COS15*COS28) - (COS17*COS28 + COS4*COS15), (COS17*COS4 - COS15*COS28) + (COS17*COS28 + COS4*COS15), - (COS12*COS13 + COS20*COS19) - (COS12*COS19 - COS13*COS20), (COS12*COS21 + COS20*COS11) - (COS12*COS11 - COS21*COS20), (COS4*COS9 - COS28*COS23) - (COS4*COS23 + COS9*COS28), (COS25*COS4 - COS7*COS28) - (COS25*COS28 + COS4*COS7), (COS12*COS5 + COS20*COS27) - (COS12*COS27 - COS5*COS20), - (COS12*COS29 + COS20*COS3) - (COS12*COS3 - COS29*COS20), (COS1*COS4 - COS31*COS28) + (COS1*COS28 + COS4*COS31), (COS1*COS28 + COS4*COS31) - (COS1*COS4 - COS31*COS28), (COS12*COS3 - COS29*COS20) - (COS12*COS29 + COS20*COS3), (COS12*COS5 + COS20*COS27) + (COS12*COS27 - COS5*COS20), - (COS25*COS4 - COS7*COS28) - (COS25*COS28 + COS4*COS7), (COS4*COS9 - COS28*COS23) + (COS4*COS23 + COS9*COS28), - (COS12*COS21 + COS20*COS11) - (COS12*COS11 - COS21*COS20), (COS12*COS13 + COS20*COS19) - (COS12*COS19 - COS13*COS20), (COS17*COS4 - COS15*COS28) - (COS17*COS28 + COS4*COS15)},
{ ((COS12-COS20)<<S_BIT),-((COS4-COS28)<<S_BIT), ((COS4+COS28)<<S_BIT),-((COS12+COS20)<<S_BIT), ((COS12+COS20)<<S_BIT),-((COS4+COS28)<<S_BIT), ((COS4-COS28)<<S_BIT),-((COS12-COS20)<<S_BIT),-((COS12-COS20)<<S_BIT), ((COS4-COS28)<<S_BIT),-((COS4+COS28)<<S_BIT), ((COS12+COS20)<<S_BIT),-((COS12+COS20)<<S_BIT), ((COS4+COS28)<<S_BIT),-((COS4-COS28)<<S_BIT), ((COS12-COS20)<<S_BIT), ((COS12-COS20)<<S_BIT),-((COS4-COS28)<<S_BIT), ((COS4+COS28)<<S_BIT),-((COS12+COS20)<<S_BIT), ((COS12+COS20)<<S_BIT),-((COS4+COS28)<<S_BIT), ((COS4-COS28)<<S_BIT),-((COS12-COS20)<<S_BIT),-((COS12-COS20)<<S_BIT), ((COS4-COS28)<<S_BIT),-((COS4+COS28)<<S_BIT), ((COS12+COS20)<<S_BIT),-((COS12+COS20)<<S_BIT), ((COS4+COS28)<<S_BIT),-((COS4-COS28)<<S_BIT), ((COS12-COS20)<<S_BIT)},
{ COS12_SQRT_2*COS17 - COS20_SQRT_2*COS15, COS13*COS28_SQRT_2 - COS4_SQRT_2*COS19, COS21*COS4_SQRT_2 + COS11*COS28_SQRT_2, - COS12_SQRT_2*COS23 - COS9*COS20_SQRT_2, COS12_SQRT_2*COS7 + COS25*COS20_SQRT_2, - COS4_SQRT_2*COS5 - COS28_SQRT_2*COS27, COS4_SQRT_2*COS3 - COS29*COS28_SQRT_2, COS31*COS20_SQRT_2 - COS1*COS12_SQRT_2, COS1*COS20_SQRT_2 + COS12_SQRT_2*COS31, - COS29*COS4_SQRT_2 - COS3*COS28_SQRT_2, COS4_SQRT_2*COS27 - COS5*COS28_SQRT_2, COS20_SQRT_2*COS7 - COS12_SQRT_2*COS25, COS20_SQRT_2*COS23 - COS12_SQRT_2*COS9, COS4_SQRT_2*COS11 - COS21*COS28_SQRT_2, - COS13*COS4_SQRT_2 - COS19*COS28_SQRT_2, COS12_SQRT_2*COS15 + COS17*COS20_SQRT_2, - COS12_SQRT_2*COS15 - COS17*COS20_SQRT_2, COS13*COS4_SQRT_2 + COS19*COS28_SQRT_2, COS21*COS28_SQRT_2 - COS4_SQRT_2*COS11, COS12_SQRT_2*COS9 - COS20_SQRT_2*COS23, COS12_SQRT_2*COS25 - COS20_SQRT_2*COS7, COS5*COS28_SQRT_2 - COS4_SQRT_2*COS27, COS29*COS4_SQRT_2 + COS3*COS28_SQRT_2, - COS1*COS20_SQRT_2 - COS12_SQRT_2*COS31, COS1*COS12_SQRT_2 - COS31*COS20_SQRT_2, COS29*COS28_SQRT_2 - COS4_SQRT_2*COS3, COS4_SQRT_2*COS5 + COS28_SQRT_2*COS27, - COS12_SQRT_2*COS7 - COS25*COS20_SQRT_2, COS12_SQRT_2*COS23 + COS9*COS20_SQRT_2, - COS21*COS4_SQRT_2 - COS11*COS28_SQRT_2, COS4_SQRT_2*COS19 - COS13*COS28_SQRT_2, COS20_SQRT_2*COS15 - COS12_SQRT_2*COS17},
{ (COS14-COS18)<<S_BIT,-(COS10-COS22)<<S_BIT, (COS6-COS26)<<S_BIT,-(COS2-COS30)<<S_BIT, (COS2+COS30)<<S_BIT,-(COS6+COS26)<<S_BIT, (COS10+COS22)<<S_BIT,-(COS14+COS18)<<S_BIT, (COS14+COS18)<<S_BIT,-(COS10+COS22)<<S_BIT, (COS6+COS26)<<S_BIT,-(COS2+COS30)<<S_BIT, (COS2-COS30)<<S_BIT,-(COS6-COS26)<<S_BIT, (COS10-COS22)<<S_BIT, -(COS14-COS18)<<S_BIT, -(COS14-COS18)<<S_BIT, (COS10-COS22)<<S_BIT,-(COS6-COS26)<<S_BIT, (COS2-COS30)<<S_BIT,-(COS2+COS30)<<S_BIT, (COS6+COS26)<<S_BIT,-(COS10+COS22)<<S_BIT, (COS14+COS18)<<S_BIT,-(COS14+COS18)<<S_BIT, (COS10+COS22)<<S_BIT,-(COS6+COS26)<<S_BIT, (COS2+COS30)<<S_BIT,-(COS2-COS30)<<S_BIT, (COS6-COS26)<<S_BIT,-(COS10-COS22)<<S_BIT, (COS14-COS18)<<S_BIT},
{ COS16_SQRT_2*COS15 - COS17*COS16_SQRT_2, COS16_SQRT_2*COS19 - COS13*COS16_SQRT_2, COS16_SQRT_2*COS11 - COS21*COS16_SQRT_2, COS16_SQRT_2*COS23 - COS9*COS16_SQRT_2, COS16_SQRT_2*COS7 - COS25*COS16_SQRT_2, COS16_SQRT_2*COS27 - COS5*COS16_SQRT_2, COS16_SQRT_2*COS3 - COS29*COS16_SQRT_2, COS16_SQRT_2*COS31 - COS1*COS16_SQRT_2, COS1*COS16_SQRT_2 + COS31*COS16_SQRT_2, - COS16_SQRT_2*COS29 - COS16_SQRT_2*COS3, COS16_SQRT_2*COS5 + COS16_SQRT_2*COS27, - COS16_SQRT_2*COS25 - COS16_SQRT_2*COS7, COS16_SQRT_2*COS9 + COS16_SQRT_2*COS23, - COS16_SQRT_2*COS21 - COS16_SQRT_2*COS11, COS13*COS16_SQRT_2 + COS19*COS16_SQRT_2, - COS16_SQRT_2*COS17 - COS16_SQRT_2*COS15, COS16_SQRT_2*COS17 + COS16_SQRT_2*COS15, - COS13*COS16_SQRT_2 - COS19*COS16_SQRT_2, COS16_SQRT_2*COS21 + COS16_SQRT_2*COS11, - COS16_SQRT_2*COS9 - COS16_SQRT_2*COS23, COS16_SQRT_2*COS25 + COS16_SQRT_2*COS7, - COS16_SQRT_2*COS5 - COS16_SQRT_2*COS27, COS16_SQRT_2*COS29 + COS16_SQRT_2*COS3, - COS1*COS16_SQRT_2 - COS31*COS16_SQRT_2, COS1*COS16_SQRT_2 - COS16_SQRT_2*COS31, COS29*COS16_SQRT_2 - COS16_SQRT_2*COS3, COS5*COS16_SQRT_2 - COS16_SQRT_2*COS27, COS25*COS16_SQRT_2 - COS16_SQRT_2*COS7, COS9*COS16_SQRT_2 - COS16_SQRT_2*COS23, COS21*COS16_SQRT_2 - COS16_SQRT_2*COS11, COS13*COS16_SQRT_2 - COS16_SQRT_2*COS19, COS17*COS16_SQRT_2 - COS16_SQRT_2*COS15},
};
再び図3を参照すれば、段階320で、変換部120は、整数値を有する元素から構成されたNポイントDCT行列を利用して、NポイントDCTを行う。
段階330で、変換部120は、スケーリング・ファクタを利用して、NポイントDCT結果値に係わるデスケーリングを行う。スケーリング・ファクタを利用してスケーリングされた整数値を有するNポイントDCT行列と、原NポイントDCT行列とを利用した結果値の差を補償するためには、スケーリングされた整数値を有するNポイントDCT行列を利用した変換結果値を、さらにデスケーリングしなければならない。本発明の一実施形態によるスケーリングされたNポイントDCT行列の各元素は、原NポイントDCT行列の各元素に、スケーリング・ファクタの二乗値を乗じた値に対応するので、デスケーリング過程は、変換行列結果値をS^2の値で割ることによって遂行される。前述のように、S_BITをlogSと定義すれば、デスケーリング過程は、2*S_BITほど、NポイントDCTによる結果値を右向きシフト(>>)することによって遂行される。かような右向きシフト(>>)を介したデスケーリング過程は、変換部120で遂行される代わりに、量子化部130で遂行される量子化過程と統合される。具体的には、変換係数値に対して適用される量子化ステップ(Qstep)値を、2*S_BITほど右向きシフト(>>)した値、すなわち、量子化ステップ(Qstep)値をS^2の値で割った新たな量子化ステップを利用して量子化を行うことによって、量子化過程に統合されてデスケーリング過程が遂行される。
前述の整数値を有する元素から構成されたNポイントDCT行列は、以下の図4に記載されたようなフローチャートで具現される。
図4は、本発明の一実施形態による32,16,8及び4ポイントDCT過程を再構成したフローチャートであり、図5は、図4のフローチャートに図示された各演算構成要素について説明するための参照図である。図4で、点線で表示された図面符号410は、16ポイントDCTのフローチャート、図面符号420は、8ポイントDCTのフローチャート、図面符号430は、4ポイント一次元変換のフローチャートを示す。
図4のフローチャートは、前述の本発明の一実施形態による整数値を有する元素から構成されたNポイントDCT行列によって具現されたものである。具体的には、X0ないしX31は、32ポイントDCTの入力値を示し、Y0ないしY31は、32ポイントDCTによる結果値である。一方、Y0ないしY31を入力値であると仮定すれば、X0ないしX31は、32ポイントIDCTの出力値になる。すなわち、X0ないしX31は、32ポイントDCTの入力値を示すと同時に、32ポイントIDCTの出力値である。32ポイントDCT時のデータ処理方向は、左側から右側であり、32ポイントIDCT時のデータ処理方向は、右側から左側である。
図4に図示された各演算記号の意味について、図5を参照して説明する。
図5を参照すれば、図面符号510で表示された演算は、中間値X,Y(X,Yは、実数)に対して、U=C1*X−C0*Y(C0及びC1は、既定の実数)及びV=C0*X+C1*Yによって、結果値U,V(U,Vは、実数)を獲得する演算である。C0がcosθ、C1がsinθである場合、図面符号510の演算は、結局、中間値X,Yで構成された(X,Y)をθほど回転した(U,V)を出力する回転変換に該当する。
かような回転変換演算過程は、U値を計算するとき、2回の乗算過程、V値を計算するとき、2回の乗算過程が含まれ、全4回の乗算過程が遂行される。本発明の一実施形態による変換部120は、かような図面符号510で表示された回転変換演算を行うとき、以下のように、T(Tは、実数)を計算した後、C1及びC0を利用して獲得されたC1_p_C0及びC1_m_C0と、入力されたX値及びY値とをそれぞれ乗じ、Tを加えるか、あるいは減算することによって、U,Vを計算する変更された演算を行う。C1_p_C0=C1+C0及びC1_m_C0=C1−C0である。
T=C0*(X+Y);U=C1_p_C0*X−T;V=T+C1_m_C0*Y
このように回転変換演算を、前記演算で置き換えて遂行される場合、T,U及びVの値を計算する過程それぞれに対して、一回ずつの乗算過程が遂行されるので、総3回の乗算演算が必要である。従って、かような代替演算過程を遂行することによって、既存4回の乗算演算を3回に減らすことができる。かような代替演算過程によるとき、加算演算や減算演算の回数は増加するが、かような加算演算及び減算演算は、演算複雑度が乗算演算に比べてはるかに低いので、乗算演算の回数を低減させる方が有利である。
一方、C1及びC0は、図示された#nによって決定される値であり、前述のように、C0がcosθ、C1がsinθとするとき、C0によって、C1の値が決定され、前述の表1に基づいて、図5の#nによって利用されるC0、C1_p_C0及びC1_m_C0の値は、以下の表2の通りである。
Figure 2014523673
表2の値に基づいて、図4の図面符号440の演算を行う過程を例示する。
図7Aないし図7Cは、図4の図面符号440による演算過程について説明するための図面である。
図7Aを参照すれば、図面符号440に図示された演算過程で入力される中間値を、それぞれX1,X2,X3,X4、出力値を、Y1,Y2,Y3,Y4と定義する。図7Aに図示された演算過程(440)は、図7Bに図示された演算過程、及び図7Cに図示された演算過程を含む。
図7Bを参照すれば、変換部120は、以下のアルゴリズムによって、中間値X1及びX4に係わる演算を遂行し、Y1及びY4を出力する。
{T=C0*(X1+X4);U=C1_p_C0*X1−T;V=T+C1_m_C0*X4}
表2を参照すれば、C0、C1_p_C0及びC1_m_C0の値として、C0=COS20、C1_p_C0=COS20+COS12、C1_m_C0=−COS20+COS12値が利用される(#2である場合)。
同様に、図7Cを参照すれば、変換部120は、以下のアルゴリズムによって、中間値X2及びX3に係わる演算を遂行し、Y2及びY3を出力する。
{T=C0*(X2+X3);U=C1_p_C0*X2−T;V=T+C1_m_C0*X3}
表2を参照すれば、C0、C1_p_C0及びC1_m_C0の値として、C0=COS28、C1_p_C0=−COS28+COS4、C1_m_C0=−COS28+COS4値が利用される(#3である場合)。
前述の図7Aないし図7Cに例示されているように、図4に図示された図面符号510の演算過程が、表2に図示された#nによるパラメータを利用して遂行される。
また、図5を参照すれば、図面符号520は、中間値X,Yを加えるか減算してU,Vを出力する演算であり、図面符号530は、中間値Xを、所定ビット(S_BIT)ほど左向きシフト(<<)する演算であり、図面符号540は、中間値Xを所定ビット(2*S_BIT)ほど左向きシフト(<<)する演算であり、図面符号550は、中間値Xの自乗根を出力する演算であり、図面符号560は、減算演算、図面符号570は、加算演算を示す。
前述の本発明の一実施形態による変換部120での32ポイントDCT過程は、以下のようなアルゴリズムを介して具現される。

{
E[16],O[16];
EE[8],EO[8];
EEE[4],EEO[4];
EEEE[2],EEEO[2];

for (k=0;k<16;k++)
{
E[k] = block[k] + block[31-k];
O[k] = block[k] - block[31-k];
}
/* EE and EO */
for (k=0;k<8;k++)
{
EE[k] = E[k] + E[15-k];
EO[k] = E[k] - E[15-k];
}
/* EEE and EEO */
for (k=0;k<4;k++)
{
EEE[k] = EE[k] + EE[7-k];
EEO[k] = EE[k] - EE[7-k];
}
/* EEEE and EEEO */
EEEE[0] = EEE[0] + EEE[3];
EEEO[0] = EEE[0] - EEE[3];
EEEE[1] = EEE[1] + EEE[2];
EEEO[1] = EEE[1] - EEE[2];

xBoxE2 ( EEEE, EEEE);
xBoxO2 ( EEEO, EEEO);
xBoxO4 ( EEO , EEO);
xBoxO8 ( EO , EO);
xBoxO16( O , O);

coeff[ 0] = EEEE[0];
coeff[16] = EEEE[1];
coeff[ 8] = EEEO[0];
coeff[24] = EEEO[1];
coeff[ 4] = EEO[0];
coeff[12] = EEO[1];
coeff[20] = EEO[2];
coeff[28] = EEO[3];
coeff[ 2] = EO[0];
coeff[ 6] = EO[1];
coeff[10] = EO[2];
coeff[14] = EO[3];
coeff[18] = EO[4];
coeff[22] = EO[5];
coeff[26] = EO[6];
coeff[30] = EO[7];
coeff[ 1] = O[ 0];
coeff[ 3] = O[ 1];
coeff[ 5] = O[ 2];
coeff[ 7] = O[ 3];
coeff[ 9] = O[ 4];
coeff[11] = O[ 5];
coeff[13] = O[ 6];
coeff[15] = O[ 7];
coeff[17] = O[ 8];
coeff[19] = O[ 9];
coeff[21] = O[10];
coeff[23] = O[11];
coeff[25] = O[12];
coeff[27] = O[13];
coeff[29] = O[14];
coeff[31] = O[15];
}
前記アルゴリズムに含まれたサブルーチンは、以下の通りである。
xBoxE2( Int* Ein, Int* Eout)
{
Int EE[2];
EE[0] = Ein[0]+Ein[1];
EE[1] = Ein[0]-Ein[1];

Eout[0] = (EE[0]<<12);
Eout[1] = (EE[1]<<12);
}
xBoxO2( Int* Oin, Int* Oout)
{
Givens(Oin[0],Oin[1],Oout[1],Oout[0],5312,7616,-3008);
}
xBoxO4( Int* Oin, Int* Oout)
{
Int iStage[4][3];

Givens(Oin[0],Oin[3],iStage [0][0],iStage [3][0],36,89,17);
Givens(Oin[1],Oin[2],iStage [1][0],iStage [2][0],12,75,51);

iStage [0][1] = iStage [0][0]+iStage [2][0];
iStage [1][1] = iStage [0][0]-iStage [2][0];
iStage [2][1] = iStage [3][0]-iStage [1][0];
iStage [3][1] = iStage [3][0]+iStage [1][0];

Oout[0] = ((iStage [0][1]+iStage [3][1])<<6);
Oout[1] = iStage [1][1]*90;
Oout[2] = iStage [2][1]*90;
Oout[3] = ((iStage [0][1]-iStage [3][1])<<6);
}
xBoxO8( Int* Oin, Int* Oout)
{
Int iStage16[8][4];

Givens(Oin[0],Oin[7],iStage16[7][0],iStage16[0][0],41,90,8);
Givens(Oin[6],Oin[1],iStage16[1][0],iStage16[6][0],56,86,-26);
Givens(Oin[2],Oin[5],iStage16[5][0],iStage16[2][0],19,80,42);
Givens(Oin[4],Oin[3],iStage16[3][0],iStage16[4][0],64,70,-58);

iStage16[0][1] =iStage16[0][0] + iStage16[3][0];
iStage16[1][1] =iStage16[1][0] + iStage16[2][0];
iStage16[2][1] =iStage16[1][0] - iStage16[2][0];
iStage16[3][1] =iStage16[0][0] - iStage16[3][0];
Stage16[4][1] =iStage16[4][0] + iStage16[7][0];
iStage16[5][1] =iStage16[5][0] + iStage16[6][0];
iStage16[6][1] =iStage16[5][0] - iStage16[6][0];
iStage16[7][1] =iStage16[4][0] - iStage16[7][0];
iStage16[0][2] =iStage16[0][1] + iStage16[6][1];
iStage16[1][2] =iStage16[1][1] + iStage16[7][1];
iStage16[2][2] =iStage16[2][1] + iStage16[3][1];
iStage16[3][2] =iStage16[2][1] - iStage16[3][1];
iStage16[4][2] =iStage16[4][1] + iStage16[5][1];
iStage16[5][2] =iStage16[4][1] - iStage16[5][1];
iStage16[6][2] =iStage16[0][1] - iStage16[6][1];
iStage16[7][2] =iStage16[1][1] - iStage16[7][1];
Givens(iStage16[0][2],iStage16[1][2],iStage16[0][3],iStage16[1][3],83,119,-47);
Givens(iStage16[7][2],iStage16[6][2],iStage16[6][3],iStage16[7][3],36,119,47);

iStage16[3][3] = (iStage16[4][2] + iStage16[3][2])<<6;
iStage16[4][3] = (iStage16[4][2] - iStage16[3][2])<<6;
iStage16[2][3] = iStage16[2][2]*90;
iStage16[5][3] = iStage16[5][2]*90;

Oout[0] = iStage16[4][3];
Oout[1] = iStage16[0][3];
Oout[2] = iStage16[7][3];
Oout[3] = iStage16[5][3];
Oout[4] = iStage16[2][3];
Oout[5] = iStage16[6][3];
Oout[6] = iStage16[1][3];
Oout[7] = iStage16[3][3];

}
xBoxO16( Int* Oin, Int* Oout)
{
Int iStage32[22][5];

Givens(Oin[15],Oin[ 0],iStage32[ 0][0],iStage32[15][0],47,90,-4);
Givens(Oin[ 1],Oin[14],iStage32[14][0],iStage32[ 1][0],38,89,13);
Givens(Oin[13],Oin[ 2],iStage32[2][0],iStage32[13][0],55,88,-22);
Givens(Oin[ 3],Oin[12],iStage32[12][0],iStage32[ 3][0],27,85,31);
Givens(Oin[11],Oin[ 4],iStage32[4][0],iStage32[11][0],60,82,-38);
Givens(Oin[ 5],Oin[10],iStage32[10][0],iStage32[ 5][0],16,78,46);
Givens(Oin[ 9],Oin[ 6],iStage32[ 6][0],iStage32[9][0],63,72,-54);
Givens(Oin[ 7],Oin[ 8],iStage32[ 8][0],iStage32[ 7][0],3,67,61);

iStage32[ 0][1] =iStage32[ 0][0] +iStage32[ 7][0];
iStage32[ 1][1] =iStage32[ 1][0] +iStage32[ 6][0];
iStage32[ 2][1] =iStage32[ 2][0] +iStage32[ 5][0];
iStage32[ 3][1] =iStage32[ 3][0] +iStage32[ 4][0];
iStage32[ 4][1] =iStage32[ 3][0] -iStage32[ 4][0];
iStage32[ 5][1] =iStage32[ 2][0] -iStage32[ 5][0];
iStage32[ 6][1] =iStage32[ 1][0] -iStage32[ 6][0];
iStage32[ 7][1] =iStage32[ 0][0] -iStage32[ 7][0];
iStage32[ 8][1] =iStage32[ 8][0] +iStage32[15][0];
iStage32[ 9][1] =iStage32[ 9][0] +iStage32[14][0];
iStage32[10][1] =iStage32[10][0] + iStage32[13][0];
iStage32[11][1] =iStage32[11][0] + iStage32[12][0];
iStage32[12][1] =iStage32[11][0] - iStage32[12][0];
iStage32[13][1] =iStage32[10][0] - iStage32[13][0];
iStage32[14][1] =iStage32[ 9][0] -iStage32[14][0];
iStage32[15][1] =iStage32[ 8][0] -iStage32[15][0];
iStage32[ 0][2] =iStage32[ 0][1] +iStage32[12][1];
iStage32[ 1][2] =iStage32[ 1][1] +iStage32[13][1];
iStage32[ 2][2] =iStage32[ 2][1] +iStage32[14][1];
iStage32[ 3][2] =iStage32[ 3][1] +iStage32[15][1];
iStage32[ 4][2] =iStage32[ 4][1] +iStage32[ 7][1];
iStage32[ 5][2] =iStage32[ 5][1] +iStage32[ 6][1];
iStage32[ 6][2] =iStage32[ 5][1] -iStage32[ 6][1];
iStage32[ 7][2] =iStage32[ 4][1] -iStage32[ 7][1];
iStage32[ 8][2] =iStage32[ 8][1] +iStage32[11][1];
iStage32[ 9][2] =iStage32[ 9][1] +iStage32[10][1];
iStage32[10][2] =iStage32[ 9][1] -iStage32[10][1];
iStage32[11][2] =iStage32[ 8][1] -iStage32[11][1];
iStage32[12][2] =iStage32[ 0][1] -iStage32[12][1];
iStage32[13][2] =iStage32[ 1][1] -iStage32[13][1];
iStage32[14][2] =iStage32[ 2][1] -iStage32[14][1];
iStage32[15][2] =iStage32[ 3][1] -iStage32[15][1];

Givens(iStage32[ 3][2],iStage32[ 0][2],iStage32[15][4],iStage32[ 0][4],50,125,25);
Givens(iStage32[2][2],iStage32[1][2],iStage32[17][4],iStage32[16][4],18,107,71);

Givens(iStage32[ 3][2],iStage32[ 0][2],iStage32[ 3][3],iStage32[ 0][3],36,89,17);

Givens(iStage32[ 2][2],iStage32[ 1][2],iStage32[ 2][3],iStage32[ 1][3],12,75,51);

iStage32[ 4][3] = iStage32[ 4][2] + iStage32[10][2];
iStage32[ 5][3] = iStage32[ 5][2] + iStage32[11][2];
iStage32[ 6][3] = iStage32[ 6][2] + iStage32[ 7][2];
iStage32[ 7][3] = iStage32[ 6][2] - iStage32[ 7][2];
iStage32[ 8][3] = iStage32[ 8][2] + iStage32[ 9][2];
iStage32[ 9][3] = iStage32[ 8][2] - iStage32[ 9][2];
iStage32[10][3] = iStage32[ 4][2] - iStage32[10][2];
iStage32[11][3] = iStage32[ 5][2] - iStage32[11][2];

Givens(iStage32[12][2],iStage32[15][2],iStage32[12][3],iStage32[15][3],12,75,51);
Givens(iStage32[13][2],iStage32[14][2],iStage32[13][3],iStage32[14][3],36,89,17);
Givens(iStage32[12][2],iStage32[15][2],iStage32[18][4],iStage32[19][4],18,107,71);
Givens(iStage32[13][2],iStage32[14][2],iStage32[20][4],iStage32[21][4],50,125,25);
Givens(iStage32[ 5][3],iStage32[ 4][3],iStage32[ 5][4],iStage32[4][4],36,119,47);

Givens(iStage32[11][3],iStage32[10][3],iStage32[11][4],iStage32[10][4],36,119,47);

iStage32[ 2][4] = -iStage32[ 0][3] + iStage32[ 2][3];
iStage32[ 3][4] = -iStage32[ 1][3] + iStage32[ 3][3];
iStage32[ 6][4] = 90*iStage32[ 6][3] ;
iStage32[ 7][4] = ( iStage32[ 7][3] + iStage32[ 8][3])<<6;
iStage32[ 8][4] = (-iStage32[ 7][3] + iStage32[ 8][3])<<6;
iStage32[ 9][4] = 90*iStage32[ 9][3] ;
iStage32[13][4] = iStage32[12][3] - iStage32[13][3];
iStage32[14][4] = iStage32[14][3] + iStage32[15][3];

Oout[ 0] = iStage32[ 8][4];
Oout[ 1] = - iStage32[ 0][4] - iStage32[17][4];
Oout[ 2] = -iStage32[13][4] + iStage32[14][4];
Oout[ 3] = - iStage32[10][4];
Oout[ 4] = iStage32[ 5][4];
Oout[ 5] = - iStage32[18][4] - iStage32[20][4];
Oout[ 6] = -iStage32[ 3][4] + iStage32[ 2][4];
Oout[ 7] = iStage32[ 6][4];
Oout[ 8] = iStage32[ 9][4];
Oout[ 9] = iStage32[ 3][4] + iStage32[ 2][4];
Oout[10] = - iStage32[21][4] + iStage32[19][4];
Oout[11] = -iStage32[ 4][4];
Oout[12] = - iStage32[11][4];
Oout[13] = -iStage32[13][4] - iStage32[14][4];
Oout[14] = - iStage32[16][4] - iStage32[15][4];
Oout[15] = -iStage32[ 7][4];
}
一方、本発明の一実施形態によれば、表1及び表2に図示されたパラメータ値や整数値を有するNポイントDCT行列の元素は、あらかじめ計算され、テーブル形態などにあらかじめ保存され、変換部120は、かようなあらかじめ計算されて保存されたパラメータ値や整数値を有するNポイントDCT行列の元素を利用して、変換を行うことができる。
図8は、本発明の一実施形態による映像逆変換装置の構成を示したブロック図である。図8を参照すれば、本発明の一実施形態による映像復号化装置800は、エントロピ復号化部810、逆量子化部820、逆変換部830及び予測部840を含む。
エントロピ復号化部810は、入力ビットストリームから、復号化される現在ブロックの予測モード情報、参照ピクチャ情報及び残差情報を抽出する。
逆量子化部820は、エントロピ復号化部810でエントロピ復号化された量子化された変換係数を逆量子化する。
逆変換部830は、逆量子化された変換係数を逆変換する。逆変換の結果、ブロック単位に係わる残差値が復元される。特に、本発明の一実施形態による逆変換部830は、前述の図1の変換部120に対応する逆変換過程を遂行する。すなわち、逆変換部830は、NポイントIDCTに利用される逆変換行列を構成する元素を、所定のスケーリング・ファクタを利用してスケーリングし、整数値を有する元素から構成されたNポイントIDCT行列を生成し、生成されたNポイントIDCT行列を利用して、NポイントIDCTを行う。また、本発明の一実施形態による逆変換部830は、原NポイントIDCT行列による結果値との差を考慮し、スケーリングされた元素を利用したNポイントIDCTの結果値に対して、さらにスケーリング・ファクタを利用したデスケーリングを行うことができる。スケーリング過程及びデスケーリング過程は、スケーリング・ファクタが2の指数乗の値を有する場合、シフト演算(>>,<<)で具現される。デスケーリング過程は、逆変換過程以後に遂行されるか、逆量子化段階で遂行される逆量子化過程に統合される。
予測部840は、インター予測またはイントラ予測を介して、現在ブロックの予測値を生成し、生成された予測値は、逆変換部830で復元された残差と加えられ、現在ブロックが復元される。
以下、図8の逆変換部830で遂行される逆変換過程について具体的に説明する。逆変換部830で遂行される逆変換過程は、図1の変換部120で遂行される変換過程と同様に、逆変換部830は、前述の数式(2)で定義されたNポイントIDCT行列の(k,n)番目の元素Bknに含まれた
Figure 2014523673
成分をスケーリングし、整数値で置き換え、整数値である元素から構成されたNポイントIDCT行列を獲得し、獲得された整数値である元素から構成されたNポイントIDCT行列を利用して、周波数逆変換を行う。
図9は、本発明の一実施形態による映像逆変換方法を示したフローチャートである。
図8及び図9を参照すれば、段階910で、逆変換部830は、NポイントIDCT行列を構成する各元素に、所定のスケーリング・ファクタSを乗じた後で四捨五入し、整数値を有する元素を獲得する。
前述のように、NポイントIDCT行列は、
Figure 2014523673
である成分を含む。変換部830は、かような
Figure 2014523673
に所定のスケーリング・ファクタSを乗じた後で四捨五入し、整数値を獲得する。前述のように、NポイントIDCT行列に含まれた
Figure 2014523673
を整数値に変換した元素は、int(cos((2n+1)k)*sqrt(2.0)*S)と表現され、かような整数値に変換された元素int(cos((2n+1)k)*sqrt(2.0)*S)を、COS_((2n+1)k)_SQRT_2と示すと定義し、逆変換段階でも、表1で定義されたパラメータをそのまま利用することができる。
逆変換部830は、このように、NポイントIDCT行列の元素に、スケーリング・ファクタSを乗じた後で四捨五入した値を、さらにスケーリング・ファクタSを利用して、左向きシフト演算(<<)を行う。S_BITをlogSと定義すれば、逆変換部830は、COS_((2n+1)k)_SQRT_2を、さらにS_BITほど左向きシフト(<<)し、NポイントIDCT行列を獲得する。本発明の一実施形態による逆変換部830は、NポイントIDCT行列の元素にSを乗じた後で四捨五入した値に、さらにSを乗じることによって、結果として、S^2ほどNポイントIDCT行列の元素をスケーリングすることになる。かようなスケーリング過程を介して獲得されたNポイントIDCT行列IDCT_NxN[N][N]は、前述のNポイントDCT行列DCT_NxN[N][N]との逆行列関係または転置関係を利用して獲得される。
再び図9を参照すれば、段階920で、逆変換部830は、整数値を有する元素から構成されたNポイントIDCT行列を利用して、NポイントIDCTを行う。
段階930で、逆変換部830は、スケーリング・ファクタを利用して、NポイントIDCT結果値に係わるデスケーリングを行う。スケーリング・ファクタを利用してスケーリングされた整数値を有するNポイントIDCT行列と、原NポイントIDCT行列とを利用した結果値の差を補償するためには、スケーリングされた整数値を有するNポイントIDCT行列を利用した逆変換結果値を、さらにデスケーリングしなければならない。本発明の一実施形態によるスケーリングされたNポイントIDCT行列の各元素は、原NポイントIDCT行列の各元素に、スケーリング・ファクタの二乗値を乗じた値に対応するので、デスケーリング過程は、逆変換行列結果値をS^2の値で割ることによって遂行される。前述のようにS_BITをlogSと定義すれば、デスケーリング過程は、2*S_BITほど、NポイントIDCTによる結果値を右向きシフト(>>)することによって遂行される。かような右向きシフト(>>)を介したデスケーリング過程は、逆変換部830で遂行される代わりに、逆量子化部820で遂行される逆量子化過程と統合される。具体的には、逆量子化過程で適用される量子化ステップ(Qstep)値を、2*S_BITほど右向きシフト(>>)した値、すなわち、量子化ステップ(Qstep)値をS^2の値で割った新たな量子化ステップを利用して逆量子化を行うことによって、逆量子化過程に統合されてデスケーリング過程が遂行される。
前述の整数値を有する元素から構成されたNポイントIDCT行列は、図10に記載されたようなフローチャートで具現される。
図10は、本発明の一実施形態による32,16,8及び4ポイントIDCT過程を再構成したフローチャートである。図10に図示された各演算構成要素の動作は、前述の図5のようである。図10で、点線で表示された図面符号1010は、16ポイントIDCTのフローチャート、図面符号1020は、8ポイントIDCTのフローチャート、図面符号1030は、4ポイントIDCTのフローチャートを示す。
図10のフローチャートは、本発明の一実施形態による整数値を有する元素から構成されたNポイントIDCT行列によって具現されたものである。具体的には、Y0ないしY31は、32ポイントIDCTの入力値を示し、X0ないしX31は、32ポイントIDCTによる結果値である。
前述の図4のように、図10に含まれた回転変換演算過程は、Tを計算した後、C1及びC0を利用して獲得されたC1_p_C0及びC1_m_C0と、入力されたX値及びY値とをそれぞれ乗じ、Tを加えるか減算することによってU,Vを計算する変更された演算を介して遂行される。C1_p_C0=C1+C0及びC1_m_C0=C1−C0である。
T=C0*(X+Y);U=C1_p_C0*X−T;V=T+C1_m_C0*Y
C1及びC0は、図示された#nによって決定される値であり、前述のように、C0がcosθ、C1がsinθとするとき、C0によってC1の値が決定され、前述の表1に基づいて、図10の#nによって、逆変換過程で利用されるC0、C1_p_C0及びC1_m_C0の値は、以下の表3の通りである。
Figure 2014523673
以上、本発明は、たとえ限定された実施形態と図面とによって説明したとしても、本発明が、前記の実施形態に限定されるものではなく、それらは、本発明が属する分野で当業者であるならば、かような記載から多様な修正及び変形が可能であろう。従って、本発明の思想は、特許請求の範囲によってのみ把握されなければならず、それと均等であるか、あるいは等価的な変形は、いずれも本発明思想の範疇に属するものである。また、本発明によるシステムは、コンピュータで読み取り可能な記録媒体に、コンピュータで読み取り可能なコードでもって具現することが可能である。コンピュータで読み取り可能な記録媒体は、コンピュータ・システムによって読み取り可能なデータが保存される全ての種類の記録装置を含む。記録媒体の例としては、ROM(read-only memory)、RAM(random-access memory)、CD(compact disc)−ROM、磁気テープ、フロッピー(登録商標)ディスク、光データ保存装置などを含む。また、コンピュータで読み取り可能な記録媒体は、ネットワークに連結されたコンピュータ・システムに分散され、分散方式で、コンピュータで読み取り可能なコードが保存されて実行される。

Claims (15)

  1. 映像の変換方法において、
    N(Nは、整数)ポイント離散コサイン変換に利用される変換行列を構成する元素を、所定のスケーリング・ファクタを利用してスケーリングし、整数値を有するスケーリングされた元素を獲得する段階と、
    前記整数値を有するスケーリングされた元素から構成された整数変換行列を利用して、前記Nポイント離散コサイン変換を行う段階と、
    前記スケーリング・ファクタを利用して、前記Nポイント離散コサイン変換行列の結果値をデスケーリングする段階と、を含むことを特徴とする映像の変換方法。
  2. 前記整数値を有するスケーリングされた元素を獲得する段階は、
    前記スケーリング・ファクタの二乗値を利用して、前記元素を整数値にスケーリングすることを特徴とする請求項1に記載の映像の変換方法。
  3. 前記スケーリング・ファクタをSとするとき、Sは、2の指数乗の値を有し、
    前記整数値を有するスケーリングされた元素を獲得する段階は、
    前記スケーリング・ファクタを乗じた元素を四捨五入して獲得された整数値を、logSビットほど、左向きシフト演算(<<)を利用してスケーリングする段階をさらに含むことを特徴とする請求項1に記載の映像の変換方法。
  4. 前記Nポイント離散コサイン変換を行う段階は、
    前記Nポイント離散コサイン変換行列を構成する演算のうち、中間値X,Y(X,Yは、実数)に対して、結果値U,V(U,Vは、実数)を獲得する以下の演算:U=C1*X−C0*Y(C0及びC1は、既定の実数)及びV=C0*X+C1*Yを、以下の演算:T=C0*(X+Y)、U=C1_p_C0*X−T及びV=T+C1_m_C0*Y(C1_p_C0=C1+C0及びC1_m_C0=C1−C0)に変更する段階と、
    前記変更された演算:T=C0*(X+Y)、U=C1_p_C0*X−T及びV=T+C1_m_C0*Yを利用して、入力値X,Yに係わる演算を遂行し、結果値U,Vを獲得する段階と、を含むことを特徴とする請求項1に記載の映像の変換方法。
  5. 前記デスケーリングする段階は、
    前記Nポイント離散コサイン変換された結果値に係わる量子化過程と結合されて遂行されることを特徴とする請求項1に記載の映像の変換方法。
  6. 前記スケーリング・ファクタは、2の指数乗の値を有し、
    前記量子化過程は、
    前記Nポイント離散コサイン変換された結果値を右向きシフト演算(>>)してデスケーリングを行う段階をさらに含むことを特徴とする請求項5に記載の映像の変換方法。
  7. 映像の変換装置において、
    N(Nは、整数)ポイント離散コサイン変換に利用される変換行列を構成する元素を、所定のスケーリング・ファクタを利用してスケーリングし、整数値を有するスケーリングされた元素を獲得し、前記整数値を有するスケーリングされた元素から構成された整数変換行列を利用して、前記Nポイント離散コサイン変換を行い、前記スケーリング・ファクタを利用して、前記Nポイント離散コサイン変換行列の結果値をデスケーリングする変換部を含むことを特徴とする映像の変換装置。
  8. 映像の逆変換方法において、
    N(Nは、整数)ポイント逆離散コサイン変換に利用される逆変換行列を構成する元素を、所定のスケーリング・ファクタを利用してスケーリングし、整数値を有するスケーリングされた元素を獲得する段階と、
    前記整数値を有するスケーリングされた元素から構成された整数逆変換行列を利用して、前記Nポイント逆離散コサイン変換を行う段階と、
    前記スケーリング・ファクタを利用して、前記Nポイント逆離散コサイン変換行列の結果値をデスケーリングする段階と、を含むことを特徴とする映像の逆変換方法。
  9. 前記整数値を有するスケーリングされた元素を獲得する段階は、
    前記スケーリング・ファクタの二乗値を利用して、前記元素を整数値にスケーリングすることを特徴とする請求項8に記載の映像の逆変換方法。
  10. 前記スケーリング・ファクタをSとするとき、Sは、2の指数乗の値を有し、
    前記整数値を有するスケーリングされた元素を獲得する段階は、
    前記スケーリング・ファクタを乗じた元素を四捨五入して獲得された整数値を、logSビットほど左向きシフト演算(<<)を利用してスケーリングする段階をさらに含むことを特徴とする請求項8に記載の映像の逆変換方法。
  11. 前記Nポイント逆離散コサイン変換を行う段階は、
    前記Nポイント逆離散コサイン変換行列を構成する演算のうち、中間値X,Y(X,Yは、実数)に対して、結果値U,V(U,Vは、実数)を獲得する以下の演算:U=C1*X−C0*Y(C0及びC1は、既定の実数)及びV=C0*X+C1*Yを、以下の演算:T=C0*(X+Y)、U=C1_p_C0*X−T及びV=T+C1_m_C0*Y(C1_p_C0=C1+C0及びC1_m_C0=C1−C0)に変更する段階と、
    前記変更された演算:T=C0*(X+Y)、U=C1_p_C0*X−T及びV=T+C1_m_C0*Yを利用して、入力値X,Yに係わる演算を遂行し、結果値U,Vを獲得する段階と、を含むことを特徴とする請求項8に記載の映像の逆変換方法。
  12. 前記デスケーリングする段階は、
    逆量子化過程と結合されて遂行されることを特徴とする請求項8に記載の映像の逆変換方法。
  13. 前記スケーリング・ファクタは、2の指数乗の値を有し、
    前記逆量子化過程は、
    ビットストリームから抽出されたNポイント離散コサイン変換結果値を量子化した値を、右向きシフト演算(>>)してデスケーリングを行う段階をさらに含むことを特徴とする請求項12に記載の映像の逆変換方法。
  14. 前記整数値を有するスケーリングされた元素は、あらかじめ計算されて保存された値を利用することを特徴とする請求項8に記載の映像の逆変換方法。
  15. 映像の逆変換装置において、
    N(Nは、整数)ポイント逆離散コサイン変換に利用される逆変換行列を構成する元素を、所定のスケーリング・ファクタを利用してスケーリングし、整数値を有するスケーリングされた元素を獲得し、前記整数値を有するスケーリングされた元素から構成された整数逆変換行列を利用して、前記Nポイント逆離散コサイン変換を行い、前記スケーリング・ファクタを利用して、前記Nポイント逆離散コサイン変換行列の結果値をデスケーリングする逆変換部を含むことを特徴とする映像の逆変換装置。
JP2014515766A 2011-06-18 2012-06-18 映像の変換方法及びその装置、逆変換方法及びその装置 Pending JP2014523673A (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201161498530P 2011-06-18 2011-06-18
US61/498,530 2011-06-18
US201161501943P 2011-06-28 2011-06-28
US61/501,943 2011-06-28
PCT/KR2012/004811 WO2012177027A2 (ko) 2011-06-18 2012-06-18 영상의 변환 방법 및 장치, 역변환 방법 및 장치

Publications (1)

Publication Number Publication Date
JP2014523673A true JP2014523673A (ja) 2014-09-11

Family

ID=47423066

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014515766A Pending JP2014523673A (ja) 2011-06-18 2012-06-18 映像の変換方法及びその装置、逆変換方法及びその装置

Country Status (6)

Country Link
US (1) US20140140394A1 (ja)
EP (1) EP2723075A4 (ja)
JP (1) JP2014523673A (ja)
KR (1) KR20120139611A (ja)
CN (1) CN103748885A (ja)
WO (1) WO2012177027A2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR3044507A1 (fr) * 2015-11-30 2017-06-02 Orange Procede de codage et de decodage d'images, dispositif de codage et de decodage d'images et programmes d'ordinateur correspondants
WO2019194505A1 (ko) * 2018-04-01 2019-10-10 엘지전자 주식회사 축소된 회전기반 변환을 이용하여 비디오 신호를 처리하는 방법 및 장치

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6134270A (en) * 1997-06-13 2000-10-17 Sun Microsystems, Inc. Scaled forward and inverse discrete cosine transform and video compression/decompression systems employing the same
KR20060135613A (ko) * 2003-09-24 2006-12-29 텍사스 인스트루먼츠 인코포레이티드 8×8 변환 및 양자화
US8335811B2 (en) * 2004-03-04 2012-12-18 Broadcom Corporation Method and system for high fidelity IDCT and DCT algorithms
CN100433837C (zh) * 2004-03-18 2008-11-12 华中科技大学 视频编码的整数变换方法
CN100442847C (zh) * 2005-11-25 2008-12-10 浙江大学 H.264整数变换加速的装置
JP2009258786A (ja) * 2008-04-11 2009-11-05 Mitsubishi Electric Corp 動画像符号化装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
JPN6014053308; Joshi, R., et.al.: '"Efficient 16 and 32-point transforms"' [online] Document: JCTVC-D256(version 3), 20110122, Joint Collaborative Team on Video Coding (JCT-VC) *
JPN6014053312; Yoon Mi Hong, et.al.: '"Low-complexity 16x16 and 32x32 transforms and partial frequency transform"' [online] Document: JCTVC-C209(version 2), 20101008, Joint Collaborative Team on Video Coding (JCT-VC) *

Also Published As

Publication number Publication date
KR20120139611A (ko) 2012-12-27
EP2723075A4 (en) 2014-12-24
CN103748885A (zh) 2014-04-23
WO2012177027A2 (ko) 2012-12-27
US20140140394A1 (en) 2014-05-22
WO2012177027A3 (ko) 2013-02-28
EP2723075A2 (en) 2014-04-23

Similar Documents

Publication Publication Date Title
KR101958842B1 (ko) 내부 예측을 위한 적응적 이산 코사인 변환 및 이산 사인 변환을 이용한 낮은 복잡도의 변환 코딩
KR101004157B1 (ko) 데이터 프레임들의 시퀀스의 효율적인 인코딩/디코딩
CA2633897C (en) Transforms with common factors
US20130195177A1 (en) Method and device for the transformation and method and device for the reverse transformation of images
US20140010284A1 (en) Image transform and inverse transform method, and image encoding and decoding device using same
US7634148B2 (en) Image signal transforming and inverse-transforming method and computer program product with pre-encoding filtering features
TW201301902A (zh) 類型六及七的離散餘弦及正弦轉換之快速計算
JP2013502625A (ja) メディアデータコーディングのための16点変換
JP2013502626A (ja) メディアデータコーディングのための16点変換
KR20120098499A (ko) 영상의 변환 방법 및 장치, 및 영상의 역변환 방법 및 장치
CN105453566B (zh) 数据编码及数据解码
JP2014523673A (ja) 映像の変換方法及びその装置、逆変換方法及びその装置
Zheng et al. Research in a fast DCT algorithm based on JPEG
KR101419689B1 (ko) H.264/avc 복호기에서 역양자화 및 역변환을 수행하는 복호화 장치 및 이를 이용한 복호화 방법
JP6555814B2 (ja) 直交変換処理装置、逆直交変換処理装置、符号化装置、復号装置、及びコンピュータプログラム
JP2006227666A (ja) 行列演算装置
JP4266512B2 (ja) データ処理装置
CN114531600B (zh) 变换单元、现场可编程门阵列、芯片、电子设备、片上系统
JP2010154577A (ja) 画像信号変換方法、画像符号化装置、画像符号化方法、画像符号化プログラム、画像復号装置、画像復号方法及び画像復号プログラム
JP2006191485A (ja) 画像信号変換方法、画像符号化装置、画像符号化方法、画像符号化プログラム、画像復号装置、画像復号方法及び画像復号プログラム
JP4448055B2 (ja) 画像信号変換方法、画像信号逆変換方法、画像符号化装置、画像復号装置、画像符号化方法、画像復号方法、画像符号化プログラム、及び、画像復号プログラム
JPH04162893A (ja) ハイブリッド符号化方式
JP2006074520A (ja) 動きベクトル検出装置
JP6541260B2 (ja) 変換処理装置、逆変換処理装置、符号化装置、復号装置、及びコンピュータプログラム
KR101423083B1 (ko) Hevc 복호기용 역변환기 설계 방법

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20141216

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20150512