WO2012177027A2 - 영상의 변환 방법 및 장치, 역변환 방법 및 장치 - Google Patents

영상의 변환 방법 및 장치, 역변환 방법 및 장치 Download PDF

Info

Publication number
WO2012177027A2
WO2012177027A2 PCT/KR2012/004811 KR2012004811W WO2012177027A2 WO 2012177027 A2 WO2012177027 A2 WO 2012177027A2 KR 2012004811 W KR2012004811 W KR 2012004811W WO 2012177027 A2 WO2012177027 A2 WO 2012177027A2
Authority
WO
WIPO (PCT)
Prior art keywords
sqrt
bit
cos24
cos8
cos20
Prior art date
Application number
PCT/KR2012/004811
Other languages
English (en)
French (fr)
Other versions
WO2012177027A3 (ko
Inventor
알쉬나엘레나
알쉰알렉산더
Original Assignee
삼성전자 주식회사
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 삼성전자 주식회사 filed Critical 삼성전자 주식회사
Priority to JP2014515766A priority Critical patent/JP2014523673A/ja
Priority to US14/127,042 priority patent/US20140140394A1/en
Priority to EP12803459.2A priority patent/EP2723075A4/en
Priority to CN201280040311.XA priority patent/CN103748885A/zh
Publication of WO2012177027A2 publication Critical patent/WO2012177027A2/ko
Publication of WO2012177027A3 publication Critical patent/WO2012177027A3/ko

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 transformations in the plane of the image
    • G06T3/40Scaling of whole images or parts thereof, e.g. expanding or contracting

Definitions

  • the present invention relates to an image encoding and decoding method and apparatus, and more particularly, to an improved transform and inverse transform method and apparatus for a large block.
  • video signals are hierarchically divided into sequences, frames, slices, macro blocks, and blocks, with blocks becoming the minimum processing unit.
  • encoding through intra-frame or inter-frame prediction, the predictive residual error of the block is obtained, and the block transform is performed so that energy can be concentrated on a few coefficients, and quantization, scanning, run length coding (Run Length) Coding) and entropy coding, the image data is compressed and recorded in a coded bitstream.
  • decoding the processing procedure is reversed. First, the block transform coefficients of entropy coding are extracted from the bit stream.
  • the conversion module is the basis of video compression, and the conversion performance directly affects the general performance of the codec.
  • DCT Discrete cosine transform
  • An object of the present invention is to provide a method and apparatus for transforming and inversely transforming an image using a more efficient discrete cosine transform.
  • the technical problem to be solved by the present invention is an image conversion method and apparatus for performing a similar discrete cosine transform while reducing the number of multiplication operations that increase the computational complexity and cost in hardware implementation in large cosine transform, and image It is to provide a method and apparatus for inverse transformation of.
  • Embodiments of the present invention obtain a discrete cosine transform matrix having integer values by scaling the elements of the discrete cosine transform matrix, and the number of times of multiplicative operations is equal to the operation corresponding to the rotation transform performed in the transform algorithm based on the discrete cosine transform matrix.
  • the computational complexity is reduced by performing through reduced alternative operations.
  • a method and apparatus for converting and inversely transforming an image to reduce complexity and increase computation speed through an integer-based arithmetic process rather than floating-point arithmetic when transforming and inverse transforming a large block may be provided.
  • the computational complexity is reduced by reducing the number of multiplication operations performed at the discrete cosine transform and the inverse transform.
  • FIG. 1 illustrates an image encoding apparatus according to an embodiment of the present invention.
  • FIG. 2 shows an example of a flow graph of a 32 point discrete cosine transform in accordance with an embodiment of the present invention.
  • FIG. 3 is a flowchart illustrating an image conversion method according to an embodiment of the present invention.
  • FIG. 4 is a flowchart reconstructing a 32, 16, 8 and 4 point discrete cosine transform process according to an embodiment of the present invention.
  • FIG. 5 is a reference diagram for describing each operation component of the flowchart of FIG. 4.
  • FIG. 6 is a reference diagram for describing a rotation transform operation included in a 32 point discrete cosine transform matrix of FIG. 2.
  • 7A to 7C are diagrams for describing a calculation process according to reference numeral 440 of FIG. 4.
  • FIG. 8 is a block diagram illustrating a configuration of an image inverse transform apparatus according to an embodiment of the present invention.
  • FIG. 9 is a flowchart illustrating an image inverse transform method according to an embodiment of the present invention.
  • 10 is a flowchart reconstructing a 32, 16, 8, and 4 point discrete cosine inverse transform process according to an embodiment of the present invention.
  • an image transformation method includes scaling elements having integer values by scaling elements constituting a transformation matrix used for N (N is an integer) point discrete cosine transform using a predetermined scaling factor. Obtaining; Performing the N point discrete cosine transform using an integer transform matrix composed of scaled elements having the integer value; And de-scaling a result of the N point discrete cosine transform matrix using the scaling factor.
  • An image conversion apparatus scales elements constituting a transformation matrix used for N (N is an integer) point discrete cosine transform using a predetermined scaling factor to obtain scaled elements having an integer value.
  • N is an integer
  • the inverse transform method of an image scales elements constituting an inverse transform matrix used for N (N is an integer) point discrete cosine inverse transform by using a predetermined scaling factor to adjust scaled elements having an integer value.
  • N is an integer
  • An inverse transform apparatus of an image scales elements constituting an inverse transform matrix used for N (N is an integer) point discrete cosine inverse transform by using a predetermined scaling factor to adjust scaled elements having an integer value.
  • N is an integer
  • FIG. 1 illustrates an image encoding apparatus according to an embodiment of the present invention.
  • the image encoding apparatus 100 may include a predictor 110, a subtractor 115, a transformer 120, a quantizer 130, and an entropy encoder 140. ).
  • the prediction unit 110 divides the input image into blocks having a predetermined size, and generates a prediction block through inter prediction or intra prediction for each of the divided blocks.
  • the prediction unit 110 generates the prediction block through a motion prediction and compensation process of generating a motion vector indicating a region similar to the current block within a predetermined search range of a previously encoded and reconstructed reference picture. And intra prediction for generating a prediction block using data of the neighboring block adjacent to the current block.
  • the subtraction unit 115 generates a residual obtained by subtracting the prediction block of the current block and the original image data.
  • the converter 120 converts the residual into the frequency domain.
  • the transform unit 120 may be applied to a block having a large size of 16x16 or more by extending a discrete cosine transform matrix defined for relatively small sizes of 4x4 and 8x8.
  • the transform unit 120 scales elements constituting a transform matrix used for N (N is an integer) point discrete cosine transform by using a predetermined scaling factor. To generate an N point discrete cosine transform matrix composed of elements having integer values, and to perform an N point discrete cosine transform using the generated N point discrete cosine transform matrix.
  • the transform unit 120 considers the difference from the result value according to the original N point discrete cosine transform matrix, and thus, results of the N point discrete cosine transform matrix using the scaled elements. De-scaling using the scaling factor is performed again on the value.
  • this scaling and descaling process may be implemented as a shift operation (>>, ⁇ ) when the scaling factor has a power of 2 value.
  • Such a shift operation can be simply implemented as compared to a multiplication operation, and the operation complexity is reduced compared to the multiplication operation.
  • the transform unit 120 according to the embodiment of the present invention may increase the computation speed while reducing the computational complexity in the discrete cosine transform of a large block.
  • the transform unit 120 reduces the number of multiplication operations corresponding to the rotation transformation in order to reduce the number of multiplication operations required in the calculation process according to the N-point discrete cosine transform matrix.
  • the transform unit 120 reduces the number of multiplication operations corresponding to the rotation transformation in order to reduce the number of multiplication operations required in the calculation process according to the N-point discrete cosine transform matrix.
  • the quantization unit 130 quantizes the converted residual.
  • the quantization unit 130 uses the scaling factor in the quantization process, and the resultant and the original N point discrete cosine transformed using an N point discrete cosine transform matrix composed of elements scaled by the transform unit 120 and having integer values.
  • a descaling process may be performed to compensate for the difference between the result values based on the transformation matrix. That is, the descaling process performed by the transform unit 120 may be integrated into the quantization process by the quantization unit 130, which will be described later.
  • the entropy encoder 140 generates a bitstream by performing variable length encoding on the quantized image data.
  • the first matrix multiplication Transform_hor x Input corresponds to performing a one-dimensional horizontal N-point discrete cosine transform on each row of Input, which is an N ⁇ N input block, and multiplying Transform_hor x Input by Transform_ver by one-dimensional N points.
  • the discrete cosine transform matrix Transform_hor in the row direction and the discrete cosine transform matrix Transform_ver in the column direction are transpose matrices.
  • the N point discrete cosine transform matrix performed in the row direction and the column direction will be described.
  • the vertical or horizontal direction for the transformation of the NxN input block The (k, n) th element A kn of the N point discrete cosine transform matrix of may be defined as in Equation 1 below.
  • FIG. 2 shows an example of a flow graph of a 32 point discrete cosine transform in accordance with an embodiment of the present invention.
  • a discrete cosine transform matrix composed of elements defined by Equation 1 may be implemented through a flowchart 200 as shown in FIG. 2.
  • X0 to X31 represent input values of a 32 point discrete cosine transform.
  • Y0 to Y31 are the result of 32 point discrete cosine transform.
  • X0 to X31 are output values of the 32-point discrete cosine inverse transform. That is, X0 to X31 represent the input values of the 32 point discrete cosine transform and at the same time the output value of the 32 point discrete cosine inverse transform.
  • the data processing direction is from left to right
  • the 32 point discrete cosine inverse transform the data processing direction is from right to left.
  • the two lines intersecting at the point represent the addition of two numbers. '-' Indicates negation. If the value passing through the line is X, -X is output.
  • the value R ( ⁇ ) on each line represents an operation corresponding to a rotation transformation that performs rotation transformation of the input value by ⁇ .
  • the value input through each line is multiplied by the value of cos ⁇ or sin ⁇ , or Indicates an operation to subtract.
  • FIG. 2 shows a flow chart of a 32 point discrete cosine transform matrix
  • a flow chart of a 16 point discrete cosine transform can be obtained by selecting portions for even and odd inputs, and again, an even number of flow charts of a 16 point discrete cosine transform. By selecting the portions for the second and odd inputs, a flow diagram of the eight point discrete cosine transform can be obtained. Similarly, a flow chart of a four point discrete cosine transform and a two point discrete cosine transform can be obtained from the flowchart of FIG. 2.
  • R ([theta]) indicated in some lines represents an operation for performing a rotation conversion of the input value by [theta].
  • R ([theta]) indicated in some lines represents an operation for performing a rotation conversion of the input value by [theta].
  • a calculation process of the portion indicated by reference numeral 210 of FIG. 2 will be described with reference to FIG. 6.
  • FIG. 6 is a reference diagram for describing a rotation transform operation included in a 32 point discrete cosine transform matrix of FIG. 2.
  • the operation indicated by reference numeral 210 in FIG. It outputs the output value [Y1, Y2] through the same operation.
  • This operation corresponds to a rotation conversion operation that outputs a value obtained by rotating the value of (x1, x2) by ⁇ .
  • the transform unit 120 When performing the N point discrete cosine transform according to the flowchart of FIG. 2, a multiplication operation of cos ⁇ and sin ⁇ and an input value is performed according to R ( ⁇ ). Except in certain cases where ⁇ is 0, pi / 2, pi / 3, pi / 6, cos ⁇ and sin ⁇ are irrational numbers, so the multiplication process using cos ⁇ and sin ⁇ is complex in hardware. Increase. Accordingly, the transform unit 120 according to an embodiment of the present invention generates a discrete cosine transform matrix composed of elements having integer values by multiplying the elements included in the discrete cosine transform operation matrix by a predetermined scaling factor and then rounding them up. Then, the process of descaling the discrete cosine transform result using the scaling factor again.
  • FIG. 3 is a flowchart illustrating an image conversion method according to an embodiment of the present invention.
  • step 310 the transform unit 120 multiplies each element constituting the N-point discrete cosine transform matrix by a predetermined scaling factor S and then rounds up elements having integer values. Acquire.
  • the N point discrete cosine transform matrix is Contains phosphorus ingredients.
  • the conversion unit 120 is Multiplying by a predetermined scaling factor S and then rounding to obtain an integer value. If int (x) (x is a real number) is an integer value rounded to x, sqrt (x) is the square root of x, and S is the scaling factor, the transform unit 120 includes the N-point discrete cosine transform matrix.
  • the element that converts to an integer value is expressed as int (cos ((2n + 1) k) * sqrt (2.0) * S), and the element int (cos ((2n + 1) k) * converted to this integer value It is defined that sqrt (2.0) * S) is represented by COS _ ((2n + 1) k) _SQRT_2.
  • the 32-point discrete cosine transform matrix Multiplying the scaling factor S to obtain a rounded integer value as defined in Table 1 below.
  • An element that converts to an integer value is defined.
  • Table 1 sign Element of scaled 32 point discrete cosine transformation matrix
  • SQRT_2 int (sqrt (2.0) * S) 90 COS8_SQRT_2 int (cos (8 * pi / 64) * sqrt (2.0) * S) 83 COS16_SQRT_2 int (cos (16 * pi / 64) * sqrt (2.0) * S) 64 COS24_SQRT_2 int (cos (24 * pi / 64) * sqrt (2.0) * S) 36 COS4_SQRT_2 int (cos (4 * pi / 64) * S) 63 COS12_SQRT_2 int (cos (12 * pi / 64) * S) 53 COS20_SQRT_2 int (cos (20 * pi / 64) * S) 36 COS28_SQRT_2 int (cos (28 * pi / 64) * S) 12 COS2_SQRT_2 int (cos (2 *
  • SQRT_2 is If k has a value of 0, i.e. Represents an element converted to an integer value.
  • the scaling factor S has a value of 2 ⁇ 6, that is, 64, Instead, the integer value used is illustrated.
  • cos (7 * pi / 64) * 64 has a value of about 60.2588, which is rounded up to 60.
  • the transform unit 120 multiplies the elements of the N-point discrete cosine transform matrix by the scaling factor S and then performs a leftward shift operation ( ⁇ ) using the scaling factor S for the rounded value.
  • S_BIT is defined as log 2 S
  • the transform unit 120 multiplies the elements of the N-point discrete cosine transformation matrix by S and then multiplies the rounded value by S again, resulting in N-point discrete cosine transformation by S ⁇ 2. It will scale the elements of the matrix.
  • DCT_4x4 [4] [4] a 4-point discrete cosine transform matrix
  • DCT_8x8 [8] [8] an 8-point discrete cosine transform matrix
  • the transform unit 120 performs an N point discrete cosine transform using an N point discrete cosine transform matrix composed of elements having integer values.
  • the transform unit 120 descales the N point discrete cosine transform result using the scaling factor.
  • N-point discrete cosine transformation matrix with scaled integer values to compensate for the difference between the N point discrete cosine transform matrix with scaled integer values using the scaling factor and the resulting value using the original N point discrete cosine transform matrix.
  • the descaling process may be performed by right shifting the result of the N-point discrete cosine transform by 2 * S_BIT.
  • the descaling process using the right shift (>>) may be integrated with the quantization process performed by the quantization unit 130 instead of being performed by the transform unit 120.
  • a new quantization step obtained by dividing the quantization step (Qstep) value applied to the transform coefficient value by 2 * S_BIT (right), that is, the quantization step (Qstep) value by the value of S ⁇ 2, is used.
  • the descaling process may be performed by being integrated into the quantization process.
  • N point discrete cosine transform matrix composed of the above-described integer values may be implemented in a flowchart as described in FIG. 4.
  • FIG. 4 is a flowchart reconstructing a 32, 16, 8, and 4 point discrete cosine transform process according to an embodiment of the present invention
  • FIG. 5 is a reference diagram for explaining each arithmetic component shown in the flowchart of FIG. 4.
  • a reference numeral 410 denotes a flowchart of a 16 point discrete cosine transform
  • a reference numeral 420 denotes a flowchart of an 8 point discrete cosine transform
  • a reference numeral 430 denotes a flowchart of a 4 point one-dimensional transform.
  • X0 to X31 represent input values of the 32 point discrete cosine transform
  • Y0 to Y31 are the result values according to the 32 point discrete cosine transform.
  • X0 to X31 are output values of the 32-point discrete cosine inverse transform. That is, X0 to X31 represent the input values of the 32 point discrete cosine transform and at the same time the output value of the 32 point discrete cosine inverse transform.
  • the data processing direction is from left to right
  • the 32 point discrete cosine inverse transform the data processing direction is from right to left.
  • This operation obtains the result values U and V (U and V are real numbers) according to X + C1 * Y.
  • the operation 510 corresponds to a rotation transformation that outputs (U, V) rotated (X, Y) consisting of intermediate values X, Y by ⁇ .
  • the rotation conversion operation includes two multiplication processes when calculating the U value and two multiplication processes when calculating the V value, thereby performing a total of four multiplication processes.
  • T T is a real number
  • a modified operation for calculating U and V is performed by multiplying C1_p_C0 and C1_m_C0 by the input X and Y values, respectively, to add or subtract T.
  • C1 and C0 are values determined according to #n shown.
  • the value of C1 may be determined according to C0.
  • the values of C0, C1_p_C0 and C1_m_C0 used according to #n of FIG. 5 based on the above are shown in Table 2 below.
  • 7A to 7C are diagrams for describing a calculation process according to reference numeral 440 of FIG. 4.
  • an intermediate value input in the calculation process indicated by reference numeral 440 is defined as X1, X2, X3, X4, and output values are Y1, Y2, Y3, and Y4, respectively.
  • the operation 440 shown in FIG. 7A includes the operation shown in FIG. 7B and the operation shown in FIG. 7C.
  • the conversion unit 120 performs operations on the intermediate values X1 and X4 according to the following algorithm and outputs Y1 and Y4.
  • C0 COS20
  • C1_p_C0 COS20 + COS12
  • the conversion unit 120 performs operations on the intermediate values X2 and X3 according to the following algorithm, and outputs Y2 and Y3.
  • C0 COS28
  • C0 COS28
  • C0 COS28
  • reference numeral 510 shown in FIG. 4 may be performed using the parameter according to #n shown in Table 2.
  • reference numeral 520 denotes an operation for outputting U and V by adding or subtracting an intermediate value X, Y, and reference numeral 530 shifts the median X left ( ⁇ ) by a predetermined bit (S_BIT).
  • Operation 540 denotes an operation for shifting the intermediate value X to the left by a predetermined bit (2 * S_BIT)
  • reference numeral 550 denotes an operation for outputting the square root of the intermediate value X
  • reference numeral 560 denotes a subtraction operation.
  • 570 denotes an addition operation.
  • the 32-point discrete cosine transform process in the transform unit 120 according to the embodiment of the present invention described above may be implemented through the following algorithm.
  • EEE [k] EE [k] + EE [7-k];
  • EEO [k] EE [k]-EE [7-k];
  • Eout [1] (EE [1] ⁇ 12);
  • 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 [3] ((iStage [0] [1] -iStage [3] [1]) ⁇ 6);
  • 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];
  • iStage16 [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];
  • 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;
  • 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];
  • 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];
  • 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 [1] -iStage32 [0] [4]-iStage32 [17] [4];
  • Oout [2] -iStage32 [13] [4] + iStage32 [14] [4];
  • Oout [5] -iStage32 [18] [4]-iStage32 [20] [4];
  • Oout [6] -iStage32 [3] [4] + iStage32 [2] [4];
  • Oout [10] -iStage32 [21] [4] + iStage32 [19] [4];
  • Oout [14] -iStage32 [16] [4]-iStage32 [15] [4];
  • the elements of the N-point discrete cosine transform matrix having the parameter values or integer values shown in Tables 1 and 2 may be calculated in advance and stored in a table form, and the like. 120 may perform a transformation using elements of an N point discrete cosine transform matrix having such pre-computed and stored parameter values or integer values.
  • FIG. 8 is a block diagram illustrating a configuration of an image inverse transform apparatus according to an embodiment of the present invention.
  • an image decoding apparatus 800 includes an entropy decoder 810, an inverse quantizer 820, an inverse transformer 830, and a predictor 840.
  • the entropy decoder 810 extracts prediction mode information, reference picture information, and residual information of the current block to be decoded from the input bitstream.
  • the inverse quantization unit 820 inverse quantizes the quantized transform coefficients entropy decoded by the entropy decoding unit 810.
  • the inverse transform unit 830 inversely transforms the inverse quantized transform coefficients. As a result of the inverse transform, residual values for a block unit are restored.
  • the inverse transform unit 830 according to an embodiment of the present invention performs an inverse transform process corresponding to the transform unit 120 of FIG. 1. That is, the inverse transform unit 830 scales the elements constituting the inverse transform matrix used for the N point discrete cosine inverse transform by using a predetermined scaling factor, and has an N point discrete cosine inverse transform matrix composed of elements having integer values. Next, N point discrete cosine inverse transform is performed using the generated N point discrete cosine inverse transform matrix.
  • the inverse transform unit 830 considers the difference from the result value according to the original N point discrete cosine inverse transform matrix, and thus the result of the N point discrete cosine inverse transform using the scaled elements. De-scaling using the scaling factor may be performed again.
  • the scaling and descaling process may be implemented as a shift operation (>>, ⁇ ) when the scaling factor has a power of 2 value.
  • the descaling process may be performed after the inverse transform process or integrated into the inverse quantization process performed in the inverse quantization step.
  • the prediction unit 840 generates a prediction value of the current block through inter prediction or intra prediction, and the generated prediction value is added to the residual reconstructed by the inverse transformer 830 to restore the current block.
  • the inverse transform process performed by the inverse transform unit 830 of FIG. 8 is similar to the transform process performed by the transform unit 120 of FIG. 1, and the inverse transform unit 830 may be configured as the N point discrete cosine inverse transform matrix defined in Equation 2 described above.
  • k, n) element B kn The component is scaled and replaced with an integer value to obtain an N point discrete cosine inverse transform matrix composed of elements of integer values, and a frequency inverse transform is performed using an N point discrete cosine inverse transform matrix composed of elements of integer values obtained.
  • FIG. 9 is a flowchart illustrating an image inverse transform method according to an embodiment of the present invention.
  • step 810 the inverse transform unit 830 multiplies each element constituting the N point discrete cosine inverse transform matrix by a predetermined scaling factor S, and then rounds up elements having integer values. Acquire.
  • the N point discrete cosine inverse transformation matrix is Contains phosphorus ingredients.
  • the conversion unit 830 is such a Multiplying by a predetermined scaling factor S and then rounding to obtain an integer value.
  • the N point discrete cosine inverse transform matrix The element that converts to an integer value is expressed as int (cos ((2n + 1) k) * sqrt (2.0) * S), and the element int (cos ((2n + 1) k) * converted to this integer value It is defined that sqrt (2.0) * S) is expressed as COS _ ((2n + 1) k) _SQRT_2, and the parameters defined in Table 1 can be used as it is in the inverse transformation step.
  • the inverse transform unit 830 multiplies the elements of the N-point discrete cosine inverse transform matrix by the scaling factor S, and then performs a leftward shift operation ( ⁇ ) using the scaling factor S again. If S_BIT is defined as log 2 S, the inverse transform unit 830 shifts COS _ ((2n + 1) k) _SQRT_2 to the left by S_BIT again ( ⁇ ) to obtain an N point discrete cosine inverse transform matrix.
  • the inverse transform unit 830 according to an embodiment of the present invention multiplies the elements of the N-point discrete cosine inverse transformation matrix by S, and then multiplies the rounded value by S again, thereby consequently S ⁇ 2 by the N point discrete cosine inverse transformation matrix.
  • N point discrete cosine inverse transform matrix IDCT_NxN [N] [N] obtained through such a scaling process may be obtained using the inverse or binomial relationship with the aforementioned N point discrete cosine transform matrices DCT_NxN [N] [N]. It may be.
  • the inverse transform unit 830 performs an N point discrete cosine inverse transform using an N point discrete cosine inverse transform matrix composed of elements having integer values.
  • the inverse transform unit 830 performs descaling on the N point discrete cosine inverse transform result using the scaling factor.
  • N-point discrete cosine inverse transform matrix with scaled integer value to compensate for the difference between the result of using scaled integer N-point discrete cosine inverse transform matrix and original N-point discrete cosine inverse transform matrix We need to de-scale the result of the inverse transform using.
  • each element of the scaled N point discrete cosine inverse transform matrix corresponds to a value obtained by multiplying each element of the original N point discrete cosine inverse transform matrix by the square of the scaling factor
  • the descaling process This can be done by dividing the result of the inverse transformation matrix by the value of S ⁇ 2. If S_BIT is defined as log 2 S as described above, the descaling process may be performed by right shifting the result of the N point discrete cosine inverse transform (>>) by 2 * S_BIT. The descaling process through the right shift (>>) may be integrated with the inverse quantization process performed by the inverse quantizer 820 instead of being performed by the inverse transform unit 830.
  • the descaling process may be performed by being integrated into the inverse quantization process.
  • the N point discrete cosine inverse transform matrix composed of the elements having the above integer values may be implemented in a flowchart as described in FIG. 10.
  • reference numeral 1010 denotes a flowchart of a 16 point discrete cosine inverse transform
  • reference numeral 1020 denotes a flowchart of an 8 point discrete cosine inverse transform
  • reference numeral 1030 denotes a flowchart of a 4 point discrete cosine inverse transform.
  • the flowchart of FIG. 10 is implemented according to an N point discrete cosine inverse transform matrix composed of elements having integer values, according to an embodiment of the present invention.
  • Y0 to Y31 represent input values of the 32 point discrete cosine inverse transform
  • X0 to X31 are result values of the 32 point discrete cosine inverse transform.
  • the rotation conversion calculation process included in FIG. 10 calculates T, and then multiplies C1_p_C0 and C1_m_C0 obtained using C1 and C0 with the input X and Y values to add or subtract T, respectively. , Can be performed through a modified operation to calculate V.
  • C1 and C0 are values determined according to the illustrated #n.
  • the value of C1 may be determined according to C0.
  • the values of C0, C1_p_C0 and C1_m_C0 used in the inverse transformation process according to #n of FIG. 10 are shown in Table 3 below.
  • the system according to the present invention can be embodied as computer readable codes on a computer readable recording medium.
  • the computer-readable recording medium includes all kinds of recording devices in which data that can be read by a computer system is stored. Examples of the recording medium include ROM, RAM, CD-ROM, magnetic tape, floppy disk, optical data storage device and the like.
  • the computer readable recording medium can also be distributed over network coupled computer systems so that the computer readable code is stored and executed in a distributed fashion.

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)
  • Complex Calculations (AREA)
  • Editing Of Facsimile Originals (AREA)
  • Image Processing (AREA)

Abstract

영상의 변환 방법 및 장치, 역변환 방법 및 장치가 개시된다. 본 발명의 일 실시예에 따른 영상 변환 방법은 N 포인트 이산 코사인 변환에 이용되는 변환 행렬을 구성하는 원소들을 소정의 스케일링 팩터를 이용하여 스케일링하여 정수값을 갖는 스케일링된 원소들을 획득하고, 정수값을 갖는 스케일링된 원소들로 구성된 정수 변환 행렬을 이용하여 N 포인트 이산 코사인 변환을 수행하며, 스케일링 팩터를 이용하여 N 포인트 이산 코사인 변환 행렬의 결과값을 디스케일링한다.

Description

영상의 변환 방법 및 장치, 역변환 방법 및 장치
본 발명은 영상 부호화, 복호화 방법 및 장치에 관한 것으로, 보다 상세히는 큰 크기의 블록에 대한 향상된 변환, 역변환 방법 및 장치에 관한 것이다.
H.264 및 MPEG-4와 같은, 현재 국제 비디오 코딩 표준에서, 비디오 신호는 시퀀스, 프레임, 슬라이스, 매크로 블록 및 블록으로 계층적으로 분할되며, 블록은 최소 처리 유닛이 된다. 인코딩 측면에서, 인트라-프레임 또는 인터-프레임 예측을 통하여, 블록의 예측 잔류 오류가 획득되며, 블록 변환은 에너지가 소수의 계수에 집중될 수 있도록 실행되고, 양자화, 스캐닝, 런 렝스 코딩(Run Length Coding) 및 엔트로피 코딩을 통하여, 이미지 데이터는 압축되며, 코딩된 비트스트림으로 기록된다. 디코딩 측면에서, 처리 절차는 반대가 된다. 우선, 엔트로피 코딩의 블록 변환 계수가 비트 스트림으로부터 추출된다. 그리고 나서, 역양자화 및 역변환을 통하여, 블록의 예측 잔류 오류는 재구성되며, 예측 정보는 블록의 비디오 데이터를 재구성하기 위하여 사용된다. 인코딩-디코딩 처리절차에서, 변환 모듈은 비디오 압축의 기초이며, 변환성능은 코덱의 일반적인 성능에 직접적으로 영향을 준다.
이산 코사인 변환(DCT)은 MPEG-1 및 H.261과 같은 초기 비디오 코딩 표준에서 채택되었다. 1974년 이산 코사인 변환의 제안 이후에, DCT는 이미지 및 비디오 코딩 분야에서 널리 사용되었다. 변환 도메인 내의 이미지 요소의 상관성을 제거하며, 고효율 이미지 압축을 위한 기반을 마련하기 때문에, 그것의 변환 성능은 모든 차선 변환(sub-optimal transform)중 우수하다. 그러나, DCT 변환 행렬은 부동 소수점 수(floating point number)로 표현되기 때문에, 대량의 부동 소수점 계산으로 인하여 많은 시스템 자원이 소모된다. 변환 효율을 개선하는 한편, 큰 크기의 블록에 대한 변환을 수행하기 위하여 새로운 DCT 변환 알고리즘의 필요성이 증가되었다.
본 발명이 해결하고자 하는 기술적 과제는 보다 효율적인 이산 코사인 변환을 이용하여 영상을 변환, 역변환하는 방법 및 장치를 제공하는 데 있다. 특히, 본 발명이 해결하고자 하는 기술적 과제는 큰 크기의 이산 코사인 변환시에 연산 복잡도 및 하드웨어 구현시 비용을 증가시키는 곱셈 연산의 개수를 줄이면서 유사한 이산 코사인 변환을 수행하는 영상 변환 방법 및 장치와, 영상의 역변환 방법 및 장치를 제공하는 것이다.
본 발명의 실시예들은 이산 코사인 변환 행렬의 원소들을 스케일링하여 정수값을 갖는 이산 코사인 변환 행렬을 획득하며, 이산 코사인 변환 행렬에 기초한 변환 알고리즘에서 수행되는 회전 변환에 해당되는 연산을 곱셈 연산의 횟수가 줄어든 대체적인 연산을 통해 수행함으로써 연산 복잡도를 감소시킨다.
본 발명에 따르면 큰 크기의 블록에 대한 변환 및 역변환시에 부동 소수점 연산이 아닌 정수 기반의 연산 과정을 통해서 복잡도를 감소시키고 연산 속도를 증가시키는 영상의 변환 및 역변환 방법 및 장치를 제공할 수 있다. 또한, 본 발명에 따르면 이산 코사인 변환 및 역변환시에 수행되는 곱셈 연산의 횟수를 감소시킴으로써 연산 복잡도를 감소시킨다.
도 1은 본 발명의 일 실시예에 따른 영상 부호화 장치를 도시한다.
도 2는 본 발명의 일 실시예에 따른 32 포인트 이산 코사인 변환의 흐름도(flow graph)의 일 예를 도시한다.
도 3은 본 발명의 일 실시예에 따른 영상 변환 방법을 나타낸 플로우 차트이다.
도 4는 본 발명의 일 실시예에 따른 32, 16, 8 및 4 포인트 이산 코사인 변환 과정을 재구성한 흐름도이다.
도 5는 도 4의 흐름도에 도시된 각 연산 구성 요소를 설명하기 위한 참조도이다.
도 6은 도 2의 32 포인트 이산 코사인 변환 행렬에 포함된 회전 변환 연산 과정을 설명하기 위한 참조도이다.
도 7a 내지 도 7c는 도 4의 도면 부호 440에 따른 연산 과정을 설명하기 위한 도면이다.
도 8은 본 발명의 일 실시예에 따른 영상 역변환 장치의 구성을 나타낸 블록도이다.
도 9는 본 발명의 일 실시예에 따른 영상 역변환 방법을 나타낸 플로우 차트이다.
도 10은 본 발명의 일 실시예에 따른 32, 16, 8 및 4 포인트 이산 코사인 역변환 과정을 재구성한 흐름도이다.
본 발명의 일 실시예에 따른 영상의 변환 방법은 N(N은 정수) 포인트 이산 코사인 변환에 이용되는 변환 행렬을 구성하는 원소들을 소정의 스케일링 팩터를 이용하여 스케일링하여 정수값을 갖는 스케일링된 원소들을 획득하는 단계; 상기 정수값을 갖는 스케일링된 원소들로 구성된 정수 변환 행렬을 이용하여 상기 N 포인트 이산 코사인 변환을 수행하는 단계; 및 상기 스케일링 팩터를 이용하여 상기 N 포인트 이산 코사인 변환 행렬의 결과값을 디스케일링(de-scaling)하는 단계를 포함하는 것을 특징으로 한다.
본 발명의 일 실시예에 따른 영상의 변환 장치는 N(N은 정수) 포인트 이산 코사인 변환에 이용되는 변환 행렬을 구성하는 원소들을 소정의 스케일링 팩터를 이용하여 스케일링하여 정수값을 갖는 스케일링된 원소들을 획득하고, 상기 정수값을 갖는 스케일링된 원소들로 구성된 정수 변환 행렬을 이용하여 상기 N 포인트 이산 코사인 변환을 수행하며, 상기 스케일링 팩터를 이용하여 상기 N 포인트 이산 코사인 변환 행렬의 결과값을 디스케일링(de-scaling)하는 변환부를 포함하는 것을 특징으로 한다.
본 발명의 일 실시예에 따른 영상의 역변환 방법은 N(N은 정수) 포인트 이산 코사인 역변환에 이용되는 역변환 행렬을 구성하는 원소들을 소정의 스케일링 팩터를 이용하여 스케일링하여 정수값을 갖는 스케일링된 원소들을 획득하는 단계; 상기 정수값을 갖는 스케일링된 원소들로 구성된 정수 역변환 행렬을 이용하여 상기 N 포인트 이산 코사인 역변환을 수행하는 단계; 및 상기 스케일링 팩터를 이용하여 상기 N 포인트 이산 코사인 역변환 행렬의 결과값을 디스케일링(de-scaling)하는 단계를 포함하는 것을 특징으로 한다.
본 발명의 일 실시예에 따른 영상의 역변환 장치는 N(N은 정수) 포인트 이산 코사인 역변환에 이용되는 역변환 행렬을 구성하는 원소들을 소정의 스케일링 팩터를 이용하여 스케일링하여 정수값을 갖는 스케일링된 원소들을 획득하고, 상기 정수값을 갖는 스케일링된 원소들로 구성된 정수 역변환 행렬을 이용하여 상기 N 포인트 이산 코사인 역변환을 수행하며, 상기 스케일링 팩터를 이용하여 상기 N 포인트 이산 코사인 역변환 행렬의 결과값을 디스케일링(de-scaling)하는 역변환부를 포함하는 것을 특징으로 한다.
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시예들에 대하여 구체적으로 설명한다.
도 1은 본 발명의 일 실시예에 따른 영상 부호화 장치를 도시한다.
도 1을 참조하면, 본 발명의 일 실시예에 따른 영상 부호화 장치(100)는 예측부(110), 감산부(115), 변환부(120), 양자화부(130) 및 엔트로피 부호화부(140)를 포함한다.
예측부(110)는 입력 영상을 소정 크기의 블록들로 분할하고, 분할된 각 블록에 대하여 인터 예측 또는 인트라 예측을 통해 예측 블록을 생성한다. 구체적으로, 예측부(110)는 이전에 부호화된 후 복원된 참조 픽처의 소정 탐색 범위 내에서 현재 블록과 유사한 영역을 가리키는 움직임 벡터를 생성하는 움직임 예측 및 보상 과정을 통해 예측 블록을 생성하는 인터 예측 및 현재 블록에 인접한 주변 블록의 데이터를 이용하여 예측 블록을 생성하는 인트라 예측을 수행한다.
감산부(115)는 현재 블록의 예측 블록과 원 영상 데이터를 감산한 레지듀얼을 생성한다.
변환부(120)는 레지듀얼을 주파수 영역으로 변환한다. 특히, 본 발명의 실시예에 따른 변환부(120)는 종래 4x4, 8x8의 상대적으로 작은 크기에 대해서 정의되었던 이산 코사인 변환(discret cosine transform) 행렬을 확장하여 16x16 이상의 큰 크기의 블록에도 적용될 수 있다. 후술되는 바와 같이 본 발명의 일 실시예에 따른 변환부(120)는 N(N은 정수) 포인트 이산 코사인 변환에 이용되는 변환 행렬을 구성하는 원소들을 소정의 스케일링 팩터(scaling factor)를 이용하여 스케일링하여 정수값을 갖는 원소들로 구성된 N 포인트 이산 코사인 변환 행렬을 생성하고, 생성된 N 포인트 이산 코사인 변환 행렬을 이용하여 N 포인트 이산 코사인 변환을 수행한다. 또한, 본 발명의 일 실시예에 따른 변환부(120)는 원(original) N 포인트 이산 코사인 변환 행렬에 따른 결과값과의 차이를 고려하여, 스케일링된 원소들을 이용한 N 포인트 이산 코사인 변환 행렬의 결과값에 대하여 다시 스케일링 팩터를 이용한 디스케일링(de-scaling)을 수행한다. 후술되는 바와 같이 이러한 스케일링 및 디스케일링 과정은 스케일링 팩터가 2의 지수승(power of 2)의 값을 갖는 경우 쉬프트 연산(>>,<<)으로 구현될 수 있다. 이러한 쉬프트 연산은 곱셈 연산에 비하여 간단하게 구현될 수 있으며, 곱셈 연산에 비하여 연산 복잡도가 감소된다. 따라서, 본 발명의 실시예에 따른 변환부(120)는 큰 크기의 블록에 대한 이산 코사인 변환시에 연산 복잡도를 감소시키면서 연산 속도를 증가시킬 수 있다. 또한, 본 발명의 일 실시예에 따른 변환부(120)는 N 포인트 이산 코사인 변환 행렬에 따른 연산 과정에서 필요한 곱셈 연산의 횟수를 감소시키기 위하여, 회전 변환에 해당하는 연산들을 곱셈 연산의 횟수가 감소된 대체 연산을 통해 수행함으로써 N 포인트 이산 코사인 변환 과정에 필요한 전체 곱셈 연산의 횟수를 감소시키고 전체적인 연산 복잡도를 감소시킨다.
양자화부(130)는 변환된 레지듀얼을 양자화한다. 양자화부(130)는 양자화 과정에서 스케일링 팩터를 이용하여, 변환부(120)에서 스케일링되어 정수값을 갖는 원소들로 구성된 N 포인트 이산 코사인 변환 행렬을 이용하여 변환된 결과값과 원 N 포인트 이산 코사인 변환 행렬에 기초한 결과값의 차이를 보상하기 위한 디스케일링 과정을 수행할 수 있다. 즉, 변환부(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_hor x Input x Transform_ver 과 같은 N 포인트 이산 코사인 변환 행렬 연산을 수행하여 변환 결과값 Output을 출력한다. 여기서, 첫 번째 행렬 곱셈 Transform_hor x Input는 N×N 입력 블록인 Input의 각 행에 대해서 1차원 수평 방향 N 포인트 이산 코사인 변환을 수행하는 것에 해당되며, Transform_hor x Input에 Transform_ver 를 곱하는 것은 1차원 N 포인트 수직 방향 이산 코사인 변환을 수행하는 것에 해당된다. 행 방향의 이산 코사인 변환 행렬 Transform_hor과 열 방향의 이산 코사인 변환 행렬 Transform_ver 는 서로 이항(transpose) 행렬 관계이다. 이하의 설명에서 행 방향 및 열 방향에 대하여 수행되는 N 포인트 이산 코사인 변환 행렬에 대하여 설명한다.
N 포인트 이산 코사인 변환 행렬의 (k,n)번째(k,n는 각각 0부터 (N-1)까지의 정수)에 위치한 원소를 Akn라고 하면, NxN 입력 블록의 변환을 위한 수직 또는 수평 방향의 N 포인트 이산 코사인 변환 행렬의 (k,n)번째의 원소 Akn은 다음의 수학식 1과 같이 정의될 수 있다.
수학식 1
Figure PCTKR2012004811-appb-M000001
N 포인트 이산 코사인 변환 행렬과 N 포인트 이산 코사인 역변환 행렬은 서로 이항 관계(transpose)에 있으므로, N 포인트 이산 코사인 역변환 행렬의 (k,n)번째의 원소 Bkn은 다음의 수학식 2와 같이 정의될 수 있다.
수학식 2
Figure PCTKR2012004811-appb-M000002
수학식 1 및 2에서 C 및 iC는 C*iC=2/(N^2)을 만족하는 계수값이다. C 및 iC를 곱하는 연산 과정은 변환 과정 이후에 양자화 과정과 결합되어 쉬프트 연산으로 구현될 수 있으므로, 이하의 설명에서는 N 포인트 변환 행렬 및 N 포인트 역변환 행렬에 포함된
Figure PCTKR2012004811-appb-I000001
성분을 정수값으로 대체하는 경우를 중심으로 설명한다. 또한, 이하의 설명에서 π는 pi로 표현될 수 있다.
도 2는 본 발명의 일 실시예에 따른 32 포인트 이산 코사인 변환의 흐름도(flow graph)의 일 예를 도시한다.
수학식 1로 정의된 원소들로 구성된 이산 코사인 변환 행렬은 도 2에 도시된 바와 같은 흐름도(200)를 통해 구현될 수 있다.
구체적으로 도 2를 참조하면, X0 내지 X31은 32 포인트 이산 코사인 변환의 입력값들을 나타낸다. Y0 내지 Y31은 32 포인트 이산 코사인 변환에 따른 결과값이다. 반대로, Y0 내지 Y31을 입력값이라고 가정하면, X0 내지 X31은 32 포인트 이산 코사인 역변환의 출력값이 된다. 즉, X0 내지 X31은 32포인트 이산 코사인 변환의 입력값들을 나타내는 동시에 32포인트 이산 코사인 역변환의 출력값이다. 32 포인트 이산 코사인 변환시에 데이터 처리 방향은 좌측에서 우측이며, 32 포인트 이산 코사인 역변환시에 데이터 처리 방향은 우측에서 좌측이다. 점에서 교차하는 2개의 라인은 2개의 수의 덧셈을 나타낸다. '-'는 부정(negation)을 나타내는 것으로, 해당 라인을 지나는 값을 X라고 하면 -X를 출력한다. 각 라인 위의 값 R(θ)는 입력값을 θ만큼 회전 변환을 수행하는 회전 변환에 해당하는 연산을 나타내는 것으로, 각 라인을 통해 입력되는 값에 cosθ 또는 sin θ의 값을 곱한 값을 가산하거나 감산하는 연산을 나타낸다. 도 2의 회전 변환 연산 과정에 대해서는 다음의 도 6을 참조하여 상세히 설명한다.
도 2에서는 32 포인트 이산 코사인 변환 행렬의 흐름도를 도시하였으나, 짝수 번째 및 홀수 번째 입력에 대한 부분을 선택함으로써 16 포인트 이산 코사인 변환의 흐름도를 획득할 수 있으며, 다시 16 포인트 이산 코사인 변환의 흐름도 중 짝수 번째 및 홀수 번째 입력에 대한 부분을 선택함으로써 8 포인트 이산 코사인 변환의 흐름도를 획득할 수 있다. 유사하게, 도 2의 흐름도로부터 4 포인트 이산 코사인 변환 및 2 포인트 이산 코사인 변환의 흐름도를 획득할 수 있다.
도 2에서 일부 라인에 표시된 R(θ)는 입력값을 θ만큼 회전 변환을 수행하는 연산에 나타낸다. 예를 들어, 도 2의 도면 부호 210으로 도시된 부분의 연산 과정을 도 6을 참조하여 설명한다.
도 6은 도 2의 32 포인트 이산 코사인 변환 행렬에 포함된 회전 변환 연산 과정을 설명하기 위한 참조도이다.
도 6을 참조하면, 도 2의 도면 부호 210으로 도시된 연산은 입력값 [X1,X2]에 대해서 다음의 수학식;
Figure PCTKR2012004811-appb-I000002
과 같은 연산을 통해 출력값 [Y1, Y2]를 출력하는 것이다. 이와 같은 연산은 (x1,x2)의 값을 θ만큼 회전한 값을 출력하는 회전 변환 연산에 해당한다.
도 2의 흐름도에 따라서 N 포인트 이산 코사인 변환을 수행하는 경우, R(θ)에 따라서 cosθ 및 sinθ와 입력된 값과의 곱셈 연산이 수행된다. θ가 0, pi/2, pi/3, pi/6인 특정한 경우를 제외하고 cos θ 및 sinθ는 무리수(irrational number)이기 때문에 cos θ 및 sinθ를 이용한 곱셈 연산 과정은 하드웨어로 구현시에 복잡도를 증가시킨다. 따라서, 본 발명의 일 실시예에 따른 변환부(120)는 이산 코사인 변환 연산 행렬에 포함된 원소들에 소정의 스케일링 팩터를 곱한 다음 반올림하여 정수값을 갖는 원소들로 구성된 이산 코사인 변환 행렬을 생성하고, 이산 코사인 변환 결과값을 다시 스케일링 팩터를 이용하여 디스케일링하는 과정을 수행한다.
이하, 본 발명의 일 실시예에 따라서 정수값을 갖는 원소들로 구성된 이산 코사인 변환 행렬을 생성하는 과정에 대하여 구체적으로 설명한다.
도 3은 본 발명의 일 실시예에 따른 영상 변환 방법을 나타낸 플로우 차트이다.
도 1 및 3을 참조하면, 단계 310에서 변환부(120)는 N 포인트 이산 코사인 변환 행렬을 구성하는 각 원소들에 소정의 스케일링 팩터(scaling factor) S를 곱한 후 반올림하여 정수값을 갖는 원소들을 획득한다.
전술한 바와 같이, N 포인트 이산 코사인 변환 행렬은
Figure PCTKR2012004811-appb-I000003
인 성분을 포함한다. 변환부(120)는 이러한
Figure PCTKR2012004811-appb-I000004
에 소정의 스케일링 팩터 S를 곱한 다음 반올림하여 정수값을 획득한다. int(x)(x는 실수)를 x를 반올림한 정수값, sqrt(x)는 x의 제곱근, S를 스케일링 팩터라고 하면, 변환부(120)에 의하여 N 포인트 이산 코사인 변환 행렬에 포함된
Figure PCTKR2012004811-appb-I000005
을 정수값으로 변환한 원소는 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 포인트 이산 코사인 변환 행렬에 포함된
Figure PCTKR2012004811-appb-I000006
에 스케일링 팩터 S를 곱하여 반올림한 정수값을 획득하는 경우, 다음의 표 1에 정의된 바와 같이
Figure PCTKR2012004811-appb-I000007
를 정수값으로 변환한 원소가 정의된다.
표 1
기호 스케일링된 32 포인트 이산 코사인 변환 행렬의 원소 예시적인 값
SQRT_2 int(sqrt(2.0) * S ) 90
COS8_SQRT_2 int(cos( 8*pi/64) *sqrt(2.0) * S) 83
COS16_SQRT_2 int(cos( 16*pi/64) *sqrt(2.0) * S) 64
COS24_SQRT_2 int(cos( 24*pi/64) *sqrt(2.0) * S) 36
COS4_SQRT_2 int(cos( 4*pi/64) * S) 63
COS12_SQRT_2 int(cos( 12*pi/64) * S) 53
COS20_SQRT_2 int(cos( 20*pi/64) * S) 36
COS28_SQRT_2 int(cos( 28*pi/64) * S) 12
COS2_SQRT_2 int(cos(2*pi/64) * S) 64
COS6_SQRT_2 int(cos( 6*pi/64) * S) 61
COS10_SQRT_2 int(cos( 10*pi/64) * S) 56
COS14_SQRT_2 int(cos( 14*pi/64) * S) 49
COS18_SQRT_2 int(cos( 18*pi/64) * S) 41
COS22_SQRT_2 int(cos( 22*pi/64) * S) 30
COS26_SQRT_2 int(cos( 26*pi/64) * S) 19
COS30_SQRT_2 int(cos( 30*pi/64) * S) 6
COS1_SQRT_2 int(cos( 1*pi/64) * S) 64
COS3_SQRT_2 int(cos( 3*pi/64) * S) 63
COS5_SQRT_2 int(cos( 5*pi/64) * S) 62
COS7_SQRT_2 int(cos( 7*pi/64) * S) 60
COS9_SQRT_2 int(cos( 9*pi/64) * S) 58
COS11_SQRT_2 int(cos( 11*pi/64) * S) 55
COS13_SQRT_2 int(cos( 13*pi/64) * S) 51
COS15_SQRT_2 int(cos(15*pi/64) * S) 47
COS17_SQRT_2 int(cos( 17*pi/64) * S) 43
COS19_SQRT_2 int(cos( 19*pi/64) * S) 38
COS21_SQRT_2 int(cos( 21*pi/64) * S) 33
COS23_SQRT_2 int(cos( 23*pi/64) * S) 27
COS25_SQRT_2 int(cos( 25*pi/64) * S) 22
COS27_SQRT_2 int(cos( 27*pi/64) * S) 16
COS29_SQRT_2 int(cos( 29*pi/64) * S) 9
COS31_SQRT_2 int(cos( 31*pi/64) * S) 3
COS4_SQRT_2 int(cos( 4*pi/64) *sqrt(2.0) * S) 89
COS12_SQRT_2 int(cos( 12*pi/64) *sqrt(2.0) * S) 75
COS20_SQRT_2 int(cos( 20*pi/64) *sqrt(2.0) * S) 50
COS28_SQRT_2 int(cos( 28*pi/64) *sqrt(2.0) * S) 18
표 1에서 SQRT_2는
Figure PCTKR2012004811-appb-I000008
에서 k가 0의 값을 갖는 경우, 즉
Figure PCTKR2012004811-appb-I000009
를 정수값으로 변환한 원소를 나타낸다. 표 1에서는 스케일링 팩터 S는 2^6, 즉 64의 값을 갖는 경우,
Figure PCTKR2012004811-appb-I000010
대신에 이용되는 정수값을 예시하고 있다. 예를 들어, 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 포인트 이산 코사인 변환 행렬의 원소들에 스케일링 팩터 S를 곱한 다음 반올림한 값에 대하여 다시 스케일링 팩터 S를 이용한 좌향 쉬프트 연산(<<)을 수행한다. S_BIT 를 log2S 라고 정의하면, 변환부(120)는 COS_((2n+1)k)_SQRT_2를 다시 S_BIT 만큼 좌향 쉬프트(<<)하여 N 포인트 이산 코사인 변환 행렬을 획득한다. S=1<<S_BIT 이므로, COS_((2n+1)k)_SQRT_2를 다시 S_BIT 만큼 좌향 쉬프트(<<)하는 연산은 결국 S를 곱하는 연산에 해당한다. 따라서, 본 발명의 일 실시예에 따른 변환부(120)는 N 포인트 이산 코사인 변환 행렬의 원소들에 S를 곱한 후 반올림한 값에 다시 S를 곱함으로써 결과적으로 S^2만큼 N 포인트 이산 코사인 변환 행렬의 원소들을 스케일링하게 된다. 이와 같은 스케일링 과정을 통해 획득된 4 포인트 이산 코사인 변환 행렬인 DCT_4x4[4][4], 8 포인트 이산 코사인 변환 행렬인 DCT_8x8[8][8], 16 포인트 이산 코사인 변환 행렬인 DCT_16x16[16][16], 32 포인트 이산 코사인 변환 행렬인 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 포인트 이산 코사인 변환 행렬을 이용하여 N 포인트 이산 코사인 변환을 수행한다.
단계 330에서, 변환부(120)는 스케일링 팩터를 이용하여 N 포인트 이산 코사인 변환 결과값에 대한 디스케일링을 수행한다. 스케일링 팩터를 이용하여 스케일링된 정수값을 갖는 N 포인트 이산 코사인 변환 행렬과 원(original) N 포인트 이산 코사인 변환 행렬을 이용한 결과값의 차이를 보상하기 위해서는 스케일링된 정수값을 갖는 N 포인트 이산 코사인 변환 행렬을 이용한 변환 결과값을 다시 디스케일링(de-scaling)해야 한다. 본 발명의 일 실시예에 따른 스케일링된 N 포인트 이산 코사인 변환 행렬의 각 원소는 원(original) N 포인트 이산 코사인 변환 행렬의 각 원소에 스케일링 팩터의 제곱값을 곱한 값에 대응되므로, 디스케일링 과정은 변환 행렬 결과값을 S^2의 값으로 나누어줌으로써 수행될 수 있다. 전술한 바와 같이 S_BIT 를 log2S 라고 정의하면, 디스케일링 과정은 2*S_BIT 만큼 N 포인트 이산 코사인 변환에 따른 결과값을 우향 쉬프트(>>) 함으로써 수행될 수 있다. 이러한 우향 쉬프트(>>)를 통한 디스케일링 과정은 변환부(120)에서 수행되는 대신에 양자화부(130)에서 수행되는 양자화 과정과 통합될 수 있다. 구체적으로, 변환 계수값에 대하여 적용되는 양자화 스텝(Qstep) 값을 2*S_BIT 만큼 우향 쉬프트(>>)한 값, 즉 양자화 스텝(Qstep)값을 S^2의 값으로 나눈 새로운 양자화 스텝을 이용하여 양자화를 수행함으로써 양자화 과정에 통합되어 디스케일링 과정이 수행될 수 있다.
전술한 정수값을 갖는 원소들로 구성된 N 포인트 이산 코사인 변환 행렬은 다음의 도 4에 기재된 바와 같은 흐름도로 구현될 수 있다.
도 4는 본 발명의 일 실시예에 따른 32, 16, 8 및 4 포인트 이산 코사인 변환 과정을 재구성한 흐름도이며, 도 5는 도 4의 흐름도에 도시된 각 연산 구성 요소를 설명하기 위한 참조도이다. 도 4에서 점선으로 표시된 도면 부호 410은 16 포인트 이산 코사인 변환의 흐름도, 도면 부호 420은 8 포인트 이산 코사인 변환의 흐름도, 도면 부호 430은 4 포인트 일차원 변환의 흐름도를 나타낸다.
도 4의 흐름도는 전술한 본 발명의 일 실시예에 따른 정수값을 갖는 원소들로 구성된 N 포인트 이산 코사인 변환 행렬에 따라 구현된 것이다. 구체적으로, X0 내지 X31은 32 포인트 이산 코사인 변환의 입력값들을 나타내며, Y0 내지 Y31은 32 포인트 이산 코사인 변환에 따른 결과값이다. 반대로, Y0 내지 Y31을 입력값이라고 가정하면, X0 내지 X31은 32 포인트 이산 코사인 역변환의 출력값이 된다. 즉, X0 내지 X31은 32포인트 이산 코사인 변환의 입력값들을 나타내는 동시에 32포인트 이산 코사인 역변환의 출력값이다. 32 포인트 이산 코사인 변환시에 데이터 처리 방향은 좌측에서 우측이며, 32 포인트 이산 코사인 역변환시에 데이터 처리 방향은 우측에서 좌측이다.
도 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와 같다.
표 2
#n C0 C1_p_C0 C1_m_C0
#1 COS8_SQRT_2<<S_BIT (COS24_SQRT_2<<S_BIT)+ (COS8_SQRT_2<<S_BIT) (COS24_SQRT_2<<S_BIT)- (COS8_SQRT_2<<S_BIT)
#2 COS20 COS20+COS12 -COS20+COS12
#3 COS28 COS28+COS4 -COS28+COS4
#4 COS18 COS18+COS14 -COS18+COS14
#5 -COS10 -COS10+COS22 COS10+COS22
#6 COS26 COS26+COS6 -COS26+COS6
#7 -COS2 -COS2+COS30 COS2+COS30
#8 COS8_SQRT_2 COS24_SQRT_2+COS8_SQRT_2 COS24_SQRT_2-COS8_SQRT_2
#9 -COS24_SQRT_2 -COS24_SQRT_2+COS8_SQRT_2 COS24_SQRT_2+COS8_SQRT_2
#10 -COS15 -COS15+COS17 COS15+COS17
#11 COS19 COS19+COS13 COS19-COS13
#12 -COS11 - COS11+COS21 COS11+COS21
#13 COS23 COS23+ COS9 COS23- COS9
#14 -COS7 -COS7+COS25 COS7+COS25
#15 COS27 COS27+ COS5 COS27- COS5
#16 -COS3 -COS3+ COS29 -COS3+ COS29
#17 COS31 COS31+ COS1 COS31- COS1
#18 -COS20 -COS20+COS12 COS20+COS12
#19 -COS28 -COS28+COS4 COS28+COS4
#20 COS28 COS28+COS4 -COS28+COS4
#21 COS20 COS20+COS12 -COS20+COS12
#22 -COS24_SQRT_2 COS8_SQRT_2-COS24_SQRT_2 COS8_SQRT_2+COS24_SQRT_2
#23 -COS24_SQRT_2 COS8_SQRT_2-COS24_SQRT_2 COS8_SQRT_2+COS24_SQRT_2
#24 -COS20_SQRT_2 -COS20_SQRT_2+COS12_SQRT_2 COS20_SQRT_2+COS12_SQRT_2
#25 -COS28_SQRT_2 -COS28_SQRT_2+COS4_SQRT_2 COS28_SQRT_2+COS4_SQRT_2
#26 COS28_SQRT_2 COS28_SQRT_2+COS4_SQRT_2 -COS28_SQRT_2+COS4_SQRT_2
#27 COS20_SQRT_2 COS20_SQRT_2+COS12_SQRT_2 -COS20_SQRT_2+COS12_SQRT_2
표 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인 경우).
전술한 도 7에 예시된 바와 같이, 도 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 포인트 이산 코사인 변환 과정은 다음과 같은 알고리즘을 통해 구현될 수 있다.
{
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];
iStage16[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 포인트 이산 코사인 변환 행렬의 원소들은 미리 계산되어 테이블 형태 등으로 미리 저장될 수 있으며, 변환부(120)는 이러한 미리 계산되어 저장된 파라메터 값이나 정수값을 갖는 N 포인트 이산 코사인 변환 행렬의 원소들을 이용하여 변환을 수행할 수 있다.
도 8은 본 발명의 일 실시예에 따른 영상 역변환 장치의 구성을 나타낸 블록도이다.
도 8을 참조하면, 본 발명의 일 실시예에 따른 영상 복호화 장치(800)는 엔트로피 복호화부(810), 역양자화부(820), 역변환부(830) 및 예측부(840)를 포함한다.
엔트로피 복호화부(810)는 입력 비트스트림으로부터 복호화되는 현재 블록의 예측 모드 정보, 참조 픽처 정보 및 레지듀얼 정보를 추출한다.
역양자화부(820)는 엔트로피 복호화부(810)에서 엔트로피 복호화된 양자화된 변환 계수들을 역양자화한다.
역변환부(830)는 역양자화된 변환 계수들을 역변환한다. 역변환 결과, 블록 단위에 대한 레지듀얼 값들이 복원된다. 특히, 본 발명의 일 실시예에 따른 역변환부(830)는 전술한 도 1의 변환부(120)에 대응되는 역변환 과정을 수행한다. 즉, 역변환부(830)는 N 포인트 이산 코사인 역변환에 이용되는 역변환 행렬을 구성하는 원소들을 소정의 스케일링 팩터(scaling factor)를 이용하여 스케일링하여 정수값을 갖는 원소들로 구성된 N 포인트 이산 코사인 역변환 행렬을 생성하고, 생성된 N 포인트 이산 코사인 역변환 행렬을 이용하여 N 포인트 이산 코사인 역변환을 수행한다. 또한, 본 발명의 일 실시예에 따른 역변환부(830)는 원(original) N 포인트 이산 코사인 역변환 행렬에 따른 결과값과의 차이를 고려하여, 스케일링된 원소들을 이용한 N 포인트 이산 코사인 역변환의 결과값에 대하여 다시 스케일링 팩터를 이용한 디스케일링(de-scaling)을 수행할 수 있다. 스케일링 및 디스케일링 과정은 스케일링 팩터가 2의 지수승(power of 2)의 값을 갖는 경우 쉬프트 연산(>>,<<)으로 구현될 수 있다. 디스케일링 과정은 역변환 과정 이후에 수행되거나, 역양자화 단계에서 수행되는 역양자화 과정에 통합될 수 있다.
예측부(840)는 인터 예측 또는 인트라 예측을 통해 현재 블록의 예측값을 생성하고, 생성된 예측값은 역변환부(830)에서 복원된 레지듀얼과 더하여져서 현재 블록이 복원된다.
이하, 도 8의 역변환부(830)에서 수행되는 역변환 과정에 대하여 구체적으로 설명한다. 역변환부(830)에서 수행되는 역변환 과정은 도 1의 변환부(120)에서 수행되는 변환 과정과 유사하게, 역변환부(830)는 전술한 수학식 2에 정의된 N 포인트 이산 코사인 역변환 행렬의 (k,n)번째의 원소 Bkn에 포함된
Figure PCTKR2012004811-appb-I000011
성분을 스케일링하여 정수값으로 대체하여 정수값인 원소들로 구성된 N 포인트 이산 코사인 역변환 행렬을 획득하고, 획득된 정수값인 원소들로 구성된 N 포인트 이산 코사인 역변환 행렬을 이용하여 주파수 역변환을 수행한다.
도 9는 본 발명의 일 실시예에 따른 영상 역변환 방법을 나타낸 플로우 차트이다.
도 8 및 9를 참조하면, 단계 810에서 역변환부(830)는 N 포인트 이산 코사인 역변환 행렬을 구성하는 각 원소들에 소정의 스케일링 팩터(scaling factor) S를 곱한 후 반올림하여 정수값을 갖는 원소들을 획득한다.
전술한 바와 같이, N 포인트 이산 코사인 역변환 행렬은
Figure PCTKR2012004811-appb-I000012
인 성분을 포함한다. 변환부(830)는 이러한
Figure PCTKR2012004811-appb-I000013
에 소정의 스케일링 팩터 S를 곱한 다음 반올림하여 정수값을 획득한다. 전술한 바와 같이, N 포인트 이산 코사인 역변환 행렬에 포함된
Figure PCTKR2012004811-appb-I000014
을 정수값으로 변환한 원소는 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 포인트 이산 코사인 역변환 행렬의 원소들에 스케일링 팩터 S를 곱한 다음 반올림한 값을 다시 스케일링 팩터 S를 이용하여 좌향 쉬프트 연산(<<)을 수행한다. S_BIT 를 log2S 라고 정의하면, 역변환부(830)는 COS_((2n+1)k)_SQRT_2를 다시 S_BIT 만큼 좌향 쉬프트(<<)하여 N 포인트 이산 코사인 역변환 행렬을 획득한다. 본 발명의 일 실시예에 따른 역변환부(830)는 N 포인트 이산 코사인 역변환 행렬의 원소들에 S를 곱한 후 반올림한 값에 다시 S를 곱함으로써 결과적으로 S^2만큼 N 포인트 이산 코사인 역변환 행렬의 원소들을 스케일링하게 된다. 이와 같은 스케일링 과정을 통해 획득된 N 포인트 이산 코사인 역변환 행렬 IDCT_NxN[N][N]은 전술한 N 포인트 이산 코사인 변환 행렬들 DCT_NxN[N][N]과의 역행렬 관계 또는 이항 관계를 이용하여서 획득될 수도 있다.
다시 도 9를 참조하면, 단계 920에서 역변환부(830)는 정수값을 갖는 원소들로 구성된 N 포인트 이산 코사인 역변환 행렬을 이용하여 N 포인트 이산 코사인 역변환을 수행한다.
단계 930에서, 역변환부(830)는 스케일링 팩터를 이용하여 N 포인트 이산 코사인 역변환 결과값에 대한 디스케일링을 수행한다. 스케일링 팩터를 이용하여 스케일링된 정수값을 갖는 N 포인트 이산 코사인 역변환 행렬과 원(original) N 포인트 이산 코사인 역변환 행렬을 이용한 결과값의 차이를 보상하기 위해서는 스케일링된 정수값을 갖는 N 포인트 이산 코사인 역변환 행렬을 이용한 역변환 결과값을 다시 디스케일링(de-scaling)해야 한다. 본 발명의 일 실시예에 따른 스케일링된 N 포인트 이산 코사인 역변환 행렬의 각 원소는 원(original) N 포인트 이산 코사인 역변환 행렬의 각 원소에 스케일링 팩터의 제곱값을 곱한 값에 대응되므로, 디스케일링 과정은 역변환 행렬 결과값을 S^2의 값으로 나누어줌으로써 수행될 수 있다. 전술한 바와 같이 S_BIT 를 log2S 라고 정의하면, 디스케일링 과정은 2*S_BIT 만큼 N 포인트 이산 코사인 역변환에 따른 결과값을 우향 쉬프트(>>) 함으로써 수행될 수 있다. 이러한 우향 쉬프트(>>)를 통한 디스케일링 과정은 역변환부(830)에서 수행되는 대신에 역양자화부(820)에서 수행되는 역양자화 과정과 통합될 수 있다. 구체적으로, 역양자화 과정에서 적용되는 양자화 스텝(Qstep) 값을 2*S_BIT 만큼 우향 쉬프트(>>)한 값, 즉 양자화 스텝(Qstep)값을 S^2의 값으로 나눈 새로운 양자화 스텝을 이용하여 역양자화를 수행함으로써 역양자화 과정에 통합되어 디스케일링 과정이 수행될 수 있다.
전술한 정수값을 갖는 원소들로 구성된 N 포인트 이산 코사인 역변환 행렬은 도 10에 기재된 바와 같은 흐름도로 구현될 수 있다.
도 10은 본 발명의 일 실시예에 따른 32, 16, 8 및 4 포인트 이산 코사인 역변환 과정을 재구성한 흐름도이다. 도 10에 도시된 각 연산 구성 요소의 동작은 전술한 도 5와 같다. 도 10에서 점선으로 표시된 도면 부호 1010은 16 포인트 이산 코사인 역변환의 흐름도, 도면 부호 1020은 8 포인트 이산 코사인 역변환의 흐름도, 도면 부호 1030은 4 포인트 이산 코사인 역변환의 흐름도를 나타낸다.
도 10의 흐름도는 본 발명의 일 실시예에 따른 정수값을 갖는 원소들로 구성된 N 포인트 이산 코사인 역변환 행렬에 따라 구현된 것이다. 구체적으로, Y0 내지 Y31은 32 포인트 이산 코사인 역변환의 입력값들을 나타내며, X0 내지 X31은 32 포인트 이산 코사인 역변환에 따른 결과값이다.
전술한 도 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과 같다.
표 3
#n C0 C1_p_C0 C1_m_C0
#1 COS8_SQRT_2<<S_BIT (COS24_SQRT_2<<S_BIT)+ (COS8_SQRT_2<<S_BIT) (COS24_SQRT_2<<S_BIT)- (COS8_SQRT_2<<S_BIT)
#2 -COS20 -COS20+COS12 COS20-COS12
#3 COS4 COS28+COS4 COS28-COS4
#4 COS24_SQRT_2 COS24_SQRT_2+COS8_SQRT_2 -COS24_SQRT_2+COS8_SQRT_2
#5 COS24_SQRT_2 COS24_SQRT_2+COS8_SQRT_2 -COS24_SQRT_2+COS8_SQRT_2
#6 -COS18 -COS18+COS14 COS18+COS14
#7 -COS22 COS10-COS22 COS10+COS22
#8 -COS30 COS2-COS30 COS2+COS30
#9 -COS26 -COS26+COS6 COS26+COS6
#10 COS20_SQRT_2 COS20_SQRT_2-COS12_SQRT_2 -COS20_SQRT_2-COS12_SQRT_2
#11 COS28_SQRT_2 COS28_SQRT_2+COS4_SQRT_2 -COS28_SQRT_2+COS4_SQRT_2
#12 COS4_SQRT_2 COS28_SQRT_2+COS4_SQRT_2 COS28_SQRT_2-COS4_SQRT_2
#13 COS20_SQRT_2 COS20_SQRT_2+COS12_SQRT_2 -COS20_SQRT_2+COS12_SQRT_2
#14 COS4 COS28+COS4 COS28-COS4
#15 COS12 -COS20+COS12 -COS20-COS12
#16 COS24_SQRT_2 COS8_SQRT_2+COS24_SQRT_2 COS8_SQRT_2-COS24_SQRT_2
#17 -COS24_SQRT_2 -COS8_SQRT_2-COS24_SQRT_2 -COS8_SQRT_2+COS24_SQRT_2
#18 COS12 COS20+COS12 COS20-COS12
#19 -COS28 -COS28-COS4 COS28-COS4
#20 COS23 COS23-COS9 -COS23- COS9
#21 -COS21 -COS11-COS21 -COS11+COS21
#22 COS19 COS19+COS13 -COS19+COS13
#23 -COS17 COS15-COS17 COS15+COS17
#24 COS31 COS31- COS1 -COS31- COS1
#25 -COS29 -COS3- COS29 -COS3+ COS29
#26 COS27 COS27+ COS5 -COS27+ COS5
#27 COS25 COS7+COS25 COS7-COS25
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명이 상기의 실시예에 한정되는 것은 아니며, 이는 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다. 따라서, 본 발명의 사상은 아래에 기재된 특허청구범위에 의해서만 파악되어야 하고, 이와 균등하거나 또는 등가적인 변형 모두는 본 발명 사상의 범주에 속한다 할 것이다. 또한, 본 발명에 따른 시스템은 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 기록매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피 디스크, 광데이터 저장장치 등을 포함한다. 또한 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어 분산방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다.

Claims (15)

  1. 영상의 변환 방법에 있어서,
    N(N은 정수) 포인트 이산 코사인 변환에 이용되는 변환 행렬을 구성하는 원소들을 소정의 스케일링 팩터를 이용하여 스케일링하여 정수값을 갖는 스케일링된 원소들을 획득하는 단계;
    상기 정수값을 갖는 스케일링된 원소들로 구성된 정수 변환 행렬을 이용하여 상기 N 포인트 이산 코사인 변환을 수행하는 단계; 및
    상기 스케일링 팩터를 이용하여 상기 N 포인트 이산 코사인 변환 행렬의 결과값을 디스케일링(de-scaling)하는 단계를 포함하는 것을 특징으로 하는 영상의 변환 방법.
  2. 제 1항에 있어서,
    상기 정수값을 갖는 스케일링된 원소들을 획득하는 단계는
    상기 스케일링 팩터의 제곱값을 이용하여 상기 원소들을 정수값으로 스케일링하는 것을 특징으로 하는 영상의 변환 방법.
  3. 제 1항에 있어서,
    상기 스케일링 팩터를 S라고 할 때, S는 2의 지수승(power of 2)의 값을 가지며,
    상기 정수값을 갖는 스케일링된 원소들을 획득하는 단계는
    상기 스케일링 팩터를 곱한 원소를 반올림하여 획득된 정수값을 log2S 비트만큼 좌향 쉬프트 연산(<<)을 이용하여 스케일링하는 단계를 더 포함하는 것을 특징으로 하는 영상의 변환 방법.
  4. 제 1항에 있어서,
    상기 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를 획득하는 단계를 포함하는 것을 특징으로 하는 영상의 변환 방법.
  5. 제 1항에 있어서,
    상기 디스케일링하는 단계는
    상기 N 포인트 이산 코사인 변환된 결과값에 대한 양자화 과정과 결합되어 수행되는 것을 특징으로 하는 영상의 변환 방법.
  6. 제 5항에 있어서,
    상기 스케일링 팩터는 2의 지수승(power of 2)의 값을 가지며,
    상기 양자화 과정은
    상기 N 포인트 이산 코사인 변환된 결과값을 우향 쉬프트 연산(>>)하여 디스케일링을 수행하는 단계를 더 포함하는 것을 특징으로 하는 영상의 변환 방법.
  7. 영상의 변환 장치에 있어서,
    N(N은 정수) 포인트 이산 코사인 변환에 이용되는 변환 행렬을 구성하는 원소들을 소정의 스케일링 팩터를 이용하여 스케일링하여 정수값을 갖는 스케일링된 원소들을 획득하고, 상기 정수값을 갖는 스케일링된 원소들로 구성된 정수 변환 행렬을 이용하여 상기 N 포인트 이산 코사인 변환을 수행하며, 상기 스케일링 팩터를 이용하여 상기 N 포인트 이산 코사인 변환 행렬의 결과값을 디스케일링(de-scaling)하는 변환부를 포함하는 것을 특징으로 하는 영상의 변환 장치.
  8. 영상의 역변환 방법에 있어서,
    N(N은 정수) 포인트 이산 코사인 역변환에 이용되는 역변환 행렬을 구성하는 원소들을 소정의 스케일링 팩터를 이용하여 스케일링하여 정수값을 갖는 스케일링된 원소들을 획득하는 단계;
    상기 정수값을 갖는 스케일링된 원소들로 구성된 정수 역변환 행렬을 이용하여 상기 N 포인트 이산 코사인 역변환을 수행하는 단계; 및
    상기 스케일링 팩터를 이용하여 상기 N 포인트 이산 코사인 역변환 행렬의 결과값을 디스케일링(de-scaling)하는 단계를 포함하는 것을 특징으로 하는 영상의 역변환 방법.
  9. 제 8항에 있어서,
    상기 정수값을 갖는 스케일링된 원소들을 획득하는 단계는
    상기 스케일링 팩터의 제곱값을 이용하여 상기 원소들을 정수값으로 스케일링하는 것을 특징으로 하는 영상의 역변환 방법.
  10. 제 8항에 있어서,
    상기 스케일링 팩터를 S라고 할 때, S는 2의 지수승(power of 2)의 값을 가지며,
    상기 정수값을 갖는 스케일링된 원소들을 획득하는 단계는
    상기 스케일링 팩터를 곱한 원소를 반올림하여 획득된 정수값을 log2S 비트만큼 좌향 쉬프트 연산(<<)을 이용하여 스케일링하는 단계를 더 포함하는 것을 특징으로 하는 영상의 역변환 방법.
  11. 제 8항에 있어서,
    상기 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를 획득하는 단계를 포함하는 것을 특징으로 하는 영상의 역변환 방법.
  12. 제 8항에 있어서,
    상기 디스케일링하는 단계는
    역양자화 과정과 결합되어 수행되는 것을 특징으로 하는 영상의 역변환 방법.
  13. 제 12항에 있어서,
    상기 스케일링 팩터는 2의 지수승(power of 2)의 값을 가지며,
    상기 역양자화 과정은
    비트스트림으로부터 추출된 N 포인트 이산 코사인 변환 결과값을 양자화한 값을 우향 쉬프트 연산(>>)하여 디스케일링을 수행하는 단계를 더 포함하는 것을 특징으로 하는 영상의 역변환 방법.
  14. 제 8항에 있어서,
    상기 정수값을 갖는 스케일링된 원소들은 미리 계산되어 저장된 값을 이용하는 것을 특징으로 하는 영상의 역변환 방법.
  15. 영상의 역변환 장치에 있어서,
    N(N은 정수) 포인트 이산 코사인 역변환에 이용되는 역변환 행렬을 구성하는 원소들을 소정의 스케일링 팩터를 이용하여 스케일링하여 정수값을 갖는 스케일링된 원소들을 획득하고, 상기 정수값을 갖는 스케일링된 원소들로 구성된 정수 역변환 행렬을 이용하여 상기 N 포인트 이산 코사인 역변환을 수행하며, 상기 스케일링 팩터를 이용하여 상기 N 포인트 이산 코사인 역변환 행렬의 결과값을 디스케일링(de-scaling)하는 역변환부를 포함하는 것을 특징으로 하는 영상의 역변환 장치.
PCT/KR2012/004811 2011-06-18 2012-06-18 영상의 변환 방법 및 장치, 역변환 방법 및 장치 WO2012177027A2 (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2014515766A JP2014523673A (ja) 2011-06-18 2012-06-18 映像の変換方法及びその装置、逆変換方法及びその装置
US14/127,042 US20140140394A1 (en) 2011-06-18 2012-06-18 Method and device for the transformation and method and device for the reverse transformation of images
EP12803459.2A EP2723075A4 (en) 2011-06-18 2012-06-18 METHOD AND DEVICE FOR TRANSFORMATION, AND METHOD AND DEVICE FOR INVERSE TRANSFORMATION OF IMAGES
CN201280040311.XA CN103748885A (zh) 2011-06-18 2012-06-18 用于图像变换的方法和装置及用于图像逆变换的方法和装置

Applications Claiming Priority (4)

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

Publications (2)

Publication Number Publication Date
WO2012177027A2 true WO2012177027A2 (ko) 2012-12-27
WO2012177027A3 WO2012177027A3 (ko) 2013-02-28

Family

ID=47423066

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/KR2012/004811 WO2012177027A2 (ko) 2011-06-18 2012-06-18 영상의 변환 방법 및 장치, 역변환 방법 및 장치

Country Status (6)

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

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
CN1856997A (zh) * 2003-09-24 2006-11-01 德州仪器公司 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
None
See also references of EP2723075A4

Also Published As

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

Similar Documents

Publication Publication Date Title
WO2013005961A2 (en) Mode-dependent transforms for residual coding with low latency
WO2018097693A2 (ko) 영상 부호화/복호화 방법, 장치 및 비트스트림을 저장한 기록 매체
WO2018030599A1 (ko) 인트라 예측 모드 기반 영상 처리 방법 및 이를 위한 장치
WO2011068360A2 (ko) 고해상도 영상의 부호화/복호화 방법 및 이를 수행하는 장치
WO2018044142A1 (ko) 영상 부호화/복호화 방법 및 이를 위한 장치
WO2017026681A1 (ko) 비디오 코딩 시스템에서 인터 예측 방법 및 장치
WO2017018664A1 (ko) 인트라 예측 모드 기반 영상 처리 방법 및 이를 위한 장치
WO2011040794A2 (ko) 가변 크기의 매크로블록을 이용한 영상 부호화/복호화 방법 및 장치
WO2018047995A1 (ko) 인트라 예측 모드 기반 영상 처리 방법 및 이를 위한 장치
WO2020071616A1 (ko) Cclm에 기반한 인트라 예측 방법 및 그 장치
WO2011040795A2 (ko) 분할 레이어를 이용한 영상 부호화/복호화 방법 및 장치
WO2019221465A1 (ko) 영상 복호화 방법/장치, 영상 부호화 방법/장치 및 비트스트림을 저장한 기록 매체
WO2020111843A1 (ko) 화면 내 예측 필터링을 이용한 비디오 신호 처리 방법 및 장치
WO2016195455A1 (ko) 그래프 기반 변환을 이용하여 비디오 신호를 처리하는 방법 및 장치
WO2016190627A1 (ko) 비디오 신호 처리 방법 및 장치
WO2020251278A1 (ko) 크로마 양자화 파라미터 데이터 기반 영상 디코딩 방법 및 그 장치
WO2020080782A1 (en) Artificial intelligence (ai) encoding device and operating method thereof and ai decoding device and operating method thereof
WO2020032609A1 (ko) 영상 코딩 시스템에서 어파인 머지 후보 리스트를 사용하는 어파인 움직임 예측에 기반한 영상 디코딩 방법 및 장치
WO2011021914A2 (ko) 적응적 움직임 벡터 해상도를 이용한 영상 부호화/복호화 방법 및 장치
EP3868097A1 (en) Artificial intelligence (ai) encoding device and operating method thereof and ai decoding device and operating method thereof
WO2020050695A1 (ko) 영상 코딩 시스템에서 머지 후보 리스트를 사용하는 움직임 예측에 기반한 영상 디코딩 방법 및 장치
WO2011021915A2 (ko) 적응적 움직임 벡터 해상도를 이용한 영상 부호화/복호화 방법 및 장치
WO2010019002A2 (ko) H.264 표준의 영상 프레임에서 섬네일 이미지를 생성하는 방법
WO2012177027A2 (ko) 영상의 변환 방법 및 장치, 역변환 방법 및 장치
WO2013168952A1 (ko) 인터 레이어 예측 방법 및 이를 이용하는 장치

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 12803459

Country of ref document: EP

Kind code of ref document: A2

ENP Entry into the national phase

Ref document number: 2014515766

Country of ref document: JP

Kind code of ref document: A

NENP Non-entry into the national phase

Ref country code: DE

WWE Wipo information: entry into national phase

Ref document number: 2012803459

Country of ref document: EP

WWE Wipo information: entry into national phase

Ref document number: 14127042

Country of ref document: US