Discrete Cosine Transform (DCT)
Discrete Cosine Transform (DCT)
Discrete Cosine Transform (DCT)
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Discrete</strong> <strong>Cosine</strong> <strong>Transform</strong> (<strong>DCT</strong>)<br />
1
<strong>DCT</strong> is a Fourier-related transform similar to<br />
DFT, but using only real numbers. It is<br />
equivalent to a DFT roughly twice the<br />
transform length, operating on real data with<br />
“Even symmetry” (since Fourier transform of<br />
a real and even function is real and even).<br />
The most common variant of <strong>DCT</strong> is the type-<br />
II <strong>DCT</strong> and its inverse is the type-III <strong>DCT</strong>.<br />
2
Two related transform are the discrete sine<br />
transform (DST), which is equivalent to a DFT<br />
of “Real and odd” functions, and the modified<br />
<strong>DCT</strong> (M<strong>DCT</strong>), which is based on a <strong>DCT</strong> of<br />
overlapping data.<br />
The other interesting transform is the discrete<br />
Hartley transform (DHT) in which<br />
Even part of DHT = Real part of DFT<br />
Odd part of DHT = Imaginary part of DFT<br />
3
<strong>DCT</strong> is often used in signal and image processing,<br />
especially for lossy data compression, because it has<br />
a strong “Energy Compaction” property: most of the<br />
signal information tends to be concentrated in a few<br />
low-frequency components of the <strong>DCT</strong>, approaching<br />
the KLT for signals based on certain limits of Markov<br />
processes.<br />
<strong>DCT</strong> is used in JPEG image compression, MJPEG and<br />
MPEG video compression.<br />
M<strong>DCT</strong> is used in MP3, AAC, etc. audio compression.<br />
4
Formulation:<br />
<strong>DCT</strong> is a linear and invertible function<br />
F: R n →R n (where R denotes the set of real<br />
numbers.), or equivalently on nxn matrix.<br />
<strong>DCT</strong>-I:<br />
1<br />
f j = ( x<br />
2<br />
0<br />
+ ( −1)<br />
j<br />
x<br />
n−1<br />
)<br />
+<br />
∑ − n 2<br />
k = 1<br />
x<br />
k<br />
π<br />
cos[<br />
n −1<br />
jk]<br />
5
A <strong>DCT</strong>-I of n=5 real numbers abcde is exactly<br />
equivalent to a DFT of 8 real numbers<br />
abcdedcb (even symmetry), here divided by 2.<br />
(In contrast, <strong>DCT</strong>-II ~ IV involve a halfsample<br />
shift in the equivalent DFT.)<br />
Note that <strong>DCT</strong>-I is not defined for n less than<br />
2. (All other <strong>DCT</strong> types are defined for any<br />
positive n.)<br />
6
<strong>DCT</strong>-II:<br />
f<br />
j<br />
=<br />
∑ − n 1<br />
k = 0<br />
x<br />
k<br />
π<br />
cos[ j(<br />
k +<br />
n<br />
1<br />
)]<br />
2<br />
Some authors further multiply the f o term by<br />
1/<br />
2<br />
(see below for the corresponding<br />
change in <strong>DCT</strong>-III) . This makes the <strong>DCT</strong>-II<br />
matrix orthogonal (up to a scale factor), but<br />
breaks the direct correspondence with a realeven<br />
DFT of half-shifted input.<br />
7
<strong>DCT</strong>-III:<br />
f<br />
j<br />
=<br />
1<br />
2<br />
x<br />
0<br />
+<br />
∑ − n 1<br />
k = 1<br />
x<br />
k<br />
π<br />
cos[ ( j<br />
n<br />
Some authors further multiply the x 0 term<br />
by 1/<br />
2 , this makes the <strong>DCT</strong>-III matrix<br />
orthogonal (up to a scale factor), but breaks<br />
the direct correspondence with a real even<br />
DFT of half-shifted output.<br />
+<br />
1<br />
) k]<br />
2<br />
8
<strong>DCT</strong>-IV:<br />
f<br />
j<br />
=<br />
∑ − n 1<br />
k = 0<br />
x<br />
k<br />
π<br />
cos[ ( j<br />
n<br />
<strong>DCT</strong>-IV matrix is orthogonal (up to a<br />
scale factor).<br />
M<strong>DCT</strong> is based on <strong>DCT</strong>-IV with<br />
overlapped data.<br />
+<br />
1<br />
)(<br />
2<br />
k<br />
+<br />
1<br />
)]<br />
2<br />
9
<strong>DCT</strong> V-VIII:<br />
<strong>DCT</strong> types I-IV are equivalent to real-even<br />
DFTs of even order; therefore, there are 4<br />
additional types of <strong>DCT</strong> corresponding to<br />
real-even DFTs of logically odd order,<br />
which have factors of (n + 1/2) in the<br />
denominators of the cosine arguments.<br />
These variants seem to be rarely used in<br />
practice.<br />
10
Inverse <strong>Transform</strong>s:<br />
I<strong>DCT</strong>-I is <strong>DCT</strong>-I multiplied by 2/(n-1).<br />
I<strong>DCT</strong>-IV is <strong>DCT</strong>-IV multiplied by 2/n.<br />
I<strong>DCT</strong>-II is <strong>DCT</strong>-III multiplied by 2/n (and<br />
versa).<br />
11
Computation<br />
Direct application of the above formulas<br />
would require O(n 2 ) operations, as in the<br />
FFT it is possible to compute the same<br />
thing with only O(nlogn) complexity by<br />
factorizing the computation. (One can also<br />
compute <strong>DCT</strong>s via FFTs combined with<br />
O(n)) pre- and post-processing steps.)<br />
12
References:<br />
1. Rao and Yip, <strong>Discrete</strong> <strong>Cosine</strong> <strong>Transform</strong>:<br />
Algorithms, Advantages, Applications; Academic<br />
Press, Boston, 1990.<br />
2. Arai, Agui, Nakajima, A Fast <strong>DCT</strong>-SQ scheme<br />
for Images, Trans. On IEICE-E, 71(11), 1095, Nov.<br />
1998.<br />
3. Tseng and Millen, On Computing the <strong>DCT</strong>, IEEE<br />
Trans. On Computers, pp. 966-968, Oct. 1978.<br />
4. Frigo and Johnson, The Design and<br />
Implementation of FFTW3, IEEE Proceedings, vol.<br />
93, no. 2, pp. 216-231, 2005.<br />
13
The implementation of the 2D-I<strong>DCT</strong><br />
Let the 8-point 1-D <strong>DCT</strong> of input data<br />
f(x) be:<br />
S<br />
8<br />
( u)<br />
=<br />
C<br />
2<br />
u<br />
7<br />
∑<br />
x=<br />
0<br />
( 2x<br />
+ 1)<br />
πu<br />
f ( x)<br />
cos<br />
16<br />
First the 1-D <strong>DCT</strong> is applied to all the<br />
rows of the 2-D input f(y,x):<br />
S<br />
8r<br />
( y,<br />
u)<br />
=<br />
C<br />
2<br />
u<br />
7<br />
∑<br />
x=<br />
0<br />
( 2x<br />
+ 1)<br />
πu<br />
f ( y,<br />
x)<br />
cos<br />
16<br />
(1)<br />
(2)<br />
14
Then the 1-D <strong>DCT</strong> is applied to the<br />
columns of the results of (2):<br />
S(<br />
v,<br />
u)<br />
=<br />
C<br />
2<br />
u<br />
7<br />
∑<br />
y=<br />
0<br />
S<br />
8r<br />
( y,<br />
u)<br />
cos<br />
y + 1)<br />
πv<br />
16<br />
By substitution we get the formulation<br />
of the 2-D <strong>DCT</strong>:<br />
S(<br />
v,<br />
u)<br />
=<br />
C<br />
2<br />
v<br />
C<br />
2<br />
u<br />
7<br />
7<br />
∑∑<br />
y= 0 x=<br />
0<br />
( 2<br />
( 2x<br />
+ 1)<br />
πu<br />
( 2y<br />
+ 1)<br />
πv<br />
f ( y,<br />
x)<br />
cos cos<br />
16 16<br />
(3)<br />
(4)<br />
15
Fast 1-D <strong>DCT</strong> Algorithms<br />
Define<br />
Eqn. (1) can be written as:<br />
Since<br />
2πux<br />
πu<br />
α = , β = , and H = α + β.<br />
16 16<br />
7<br />
7<br />
Cu<br />
( 2x<br />
+ 1)<br />
πu<br />
Cu<br />
S8 ( u)<br />
= ∑ f ( x)<br />
cos = ∑ f ( x)<br />
cos( α + β )<br />
2<br />
16 2<br />
2cos<br />
x=<br />
0<br />
H cos β = 2cos(<br />
α + β ) cos β =<br />
↑<br />
( HW )<br />
x=<br />
0<br />
2xπu<br />
2(<br />
15 − x)<br />
πu<br />
cos + cos<br />
16 16<br />
16
4<br />
C<br />
u<br />
πu<br />
cos S<br />
16<br />
8<br />
( u)<br />
=<br />
7<br />
∑<br />
x=<br />
0<br />
2xπu<br />
2(<br />
15 − x)<br />
πu<br />
f ( x)[cos<br />
+ cos ]<br />
16 16<br />
If we constitute a sequence of elements<br />
f(k), k = 0, 1, …, 15 with<br />
f<br />
( k)<br />
=<br />
⎧<br />
⎨<br />
⎩<br />
f ( k),<br />
∀k<br />
< 8<br />
f ( 15 − k),<br />
∀k<br />
≥ 8<br />
(5)<br />
17
We can re-write (5) as<br />
4<br />
C<br />
u<br />
πu<br />
cos S<br />
16<br />
When<br />
j<br />
8<br />
=<br />
( u)<br />
=<br />
−1<br />
15<br />
2kπu<br />
16<br />
∑ f ( k)<br />
cos = Re{ ∑<br />
k= 0<br />
k=<br />
0<br />
2kπu<br />
− j<br />
16<br />
Decaese the 16-point DFT is defined by<br />
F<br />
16<br />
( u)<br />
=<br />
15<br />
∑<br />
k = 0<br />
f<br />
( k)<br />
e<br />
2kπu<br />
− j<br />
16<br />
15<br />
f ( k)<br />
e<br />
}<br />
18
We have the following <strong>DCT</strong> v.s. DFT<br />
relationship<br />
4<br />
C u<br />
u<br />
cos<br />
16<br />
π : only the first 8 values<br />
S ( u)<br />
= Re{ F ( u)}<br />
are needed.<br />
8<br />
Instead of performing an I<strong>DCT</strong> an IDFT of<br />
twice the length is performed. IDFT can be<br />
implemented by IFFT with complexity<br />
O(NlogN)!<br />
16<br />
19
4 πu<br />
cos<br />
The multiplication by Cu 16 seems not so<br />
efficient. However, bear in mind that the last<br />
operation before the I<strong>DCT</strong> is the<br />
“Quantization”. That means every value is to<br />
be multiplied with a certain constant<br />
(1/Quantization factor) depending on its<br />
position in <strong>DCT</strong> matrix. So we can merge the<br />
4 πu<br />
multiplications by cos<br />
C and the multiplication<br />
u 16<br />
by Quantizer dependent constant together.<br />
As a result, the Quantization and <strong>DCT</strong>-DFT<br />
transform is performed in one step.<br />
20
Let<br />
X M = (f(0), f(1), f(2), f(3), f(4), f(5), f(6),<br />
f(7)): original data<br />
<br />
1 1 1 1 1<br />
FM = ( 16 F(0), F(1), F(2), F(3), F(4),<br />
8<br />
1<br />
8 8<br />
1<br />
8<br />
1<br />
8 8 8<br />
F(5), F(6), F(7)): scaled transformed<br />
data<br />
Define P(a,b) =<br />
2π<br />
a 2πb<br />
cos +<br />
cos<br />
16 16<br />
We can establish a matrix T M:<br />
21
22<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎦<br />
⎤<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎣<br />
⎡<br />
=<br />
)<br />
56<br />
,<br />
49<br />
(<br />
)<br />
63<br />
,<br />
42<br />
(<br />
)<br />
70<br />
,<br />
35<br />
(<br />
)<br />
77<br />
,<br />
28<br />
(<br />
)<br />
84<br />
,<br />
21<br />
(<br />
)<br />
91<br />
,<br />
14<br />
(<br />
)<br />
98<br />
,<br />
7<br />
(<br />
)<br />
105<br />
,<br />
0<br />
(<br />
)<br />
48<br />
,<br />
42<br />
(<br />
)<br />
54<br />
,<br />
36<br />
(<br />
)<br />
60<br />
,<br />
30<br />
(<br />
)<br />
66<br />
,<br />
24<br />
(<br />
)<br />
72<br />
,<br />
18<br />
(<br />
)<br />
78<br />
,<br />
12<br />
(<br />
)<br />
84<br />
,<br />
6<br />
(<br />
)<br />
90<br />
,<br />
0<br />
(<br />
)<br />
40<br />
,<br />
35<br />
(<br />
)<br />
45<br />
,<br />
30<br />
(<br />
)<br />
50<br />
,<br />
25<br />
(<br />
)<br />
55<br />
,<br />
20<br />
(<br />
)<br />
60<br />
,<br />
15<br />
(<br />
)<br />
65<br />
,<br />
10<br />
(<br />
)<br />
70<br />
,<br />
5<br />
(<br />
)<br />
75<br />
,<br />
0<br />
(<br />
)<br />
32<br />
,<br />
28<br />
(<br />
)<br />
36<br />
,<br />
24<br />
(<br />
)<br />
40<br />
,<br />
20<br />
(<br />
)<br />
44<br />
,<br />
16<br />
(<br />
)<br />
48<br />
,<br />
12<br />
(<br />
)<br />
52<br />
,<br />
8<br />
(<br />
)<br />
56<br />
,<br />
4<br />
(<br />
)<br />
60<br />
,<br />
0<br />
(<br />
)<br />
24<br />
,<br />
21<br />
(<br />
)<br />
27<br />
,<br />
18<br />
(<br />
)<br />
30<br />
,<br />
15<br />
(<br />
)<br />
33<br />
,<br />
12<br />
(<br />
)<br />
36<br />
,<br />
9<br />
(<br />
)<br />
39<br />
,<br />
6<br />
(<br />
)<br />
42<br />
,<br />
3<br />
(<br />
)<br />
045<br />
(<br />
)<br />
16<br />
,<br />
14<br />
(<br />
)<br />
18<br />
,<br />
12<br />
(<br />
)<br />
20<br />
,<br />
10<br />
(<br />
)<br />
22<br />
,<br />
8<br />
(<br />
)<br />
24<br />
,<br />
6<br />
(<br />
)<br />
26<br />
,<br />
4<br />
(<br />
)<br />
28<br />
,<br />
2<br />
(<br />
)<br />
30<br />
,<br />
0<br />
(<br />
)<br />
8<br />
,<br />
7<br />
(<br />
)<br />
9<br />
,<br />
6<br />
(<br />
)<br />
10<br />
,<br />
5<br />
(<br />
)<br />
11<br />
,<br />
4<br />
(<br />
)<br />
12<br />
,<br />
3<br />
(<br />
)<br />
13<br />
,<br />
2<br />
(<br />
)<br />
14<br />
,<br />
1<br />
(<br />
)<br />
15<br />
,<br />
0<br />
(<br />
2<br />
)<br />
0<br />
,<br />
0<br />
(<br />
2<br />
)<br />
0<br />
,<br />
0<br />
(<br />
2<br />
)<br />
0<br />
,<br />
0<br />
(<br />
2<br />
)<br />
0<br />
,<br />
0<br />
(<br />
2<br />
)<br />
0<br />
,<br />
0<br />
(<br />
2<br />
)<br />
0<br />
,<br />
0<br />
(<br />
2<br />
)<br />
0<br />
,<br />
0<br />
(<br />
2<br />
)<br />
0<br />
,<br />
0<br />
(<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
P<br />
T M
F M = X M x (1/8)T M<br />
Because<br />
cosα<br />
= cos( −α<br />
);<br />
cos( 2πn<br />
+ α)<br />
= cosα;<br />
Define<br />
k<br />
2<br />
= −cosα<br />
= cos( π −α<br />
) = cos( π + α)<br />
π 2π<br />
π 2<br />
= cos ; k4<br />
= cos = cos = ; k6<br />
8 8 4 2<br />
3π<br />
π<br />
= cos = sin<br />
8 8<br />
23
24<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎦<br />
⎤<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎣<br />
⎡<br />
−<br />
+<br />
−<br />
−<br />
−<br />
−<br />
+<br />
−<br />
−<br />
+<br />
−<br />
−<br />
+<br />
−<br />
−<br />
−<br />
−<br />
−<br />
+<br />
+<br />
−<br />
+<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
+<br />
−<br />
−<br />
−<br />
−<br />
+<br />
+<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
+<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
+<br />
+<br />
+<br />
=<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
2<br />
2<br />
4<br />
4<br />
6<br />
6<br />
6<br />
6<br />
4<br />
4<br />
2<br />
2<br />
4<br />
4<br />
4<br />
4<br />
4<br />
4<br />
4<br />
4<br />
6<br />
6<br />
4<br />
4<br />
2<br />
2<br />
2<br />
2<br />
4<br />
4<br />
6<br />
6<br />
6<br />
6<br />
4<br />
4<br />
2<br />
2<br />
2<br />
2<br />
4<br />
4<br />
6<br />
6<br />
4<br />
4<br />
4<br />
4<br />
4<br />
4<br />
4<br />
4<br />
2<br />
2<br />
4<br />
4<br />
6<br />
6<br />
6<br />
6<br />
4<br />
4<br />
2<br />
2<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
k<br />
T M
25<br />
X M = F M x (8T M -1 ) = FM x L; (L = 8T M -1 )<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎦<br />
⎤<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎣<br />
⎡<br />
−<br />
+<br />
−<br />
−<br />
−<br />
+<br />
+<br />
+<br />
−<br />
−<br />
−<br />
−<br />
+<br />
+<br />
−<br />
−<br />
−<br />
−<br />
+<br />
−<br />
−<br />
+<br />
−<br />
−<br />
−<br />
+<br />
−<br />
+<br />
−<br />
+<br />
−<br />
−<br />
−<br />
−<br />
+<br />
−<br />
+<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
−<br />
+<br />
+<br />
−<br />
−<br />
−<br />
+<br />
−<br />
+<br />
+<br />
−<br />
−<br />
−<br />
−<br />
+<br />
−<br />
+<br />
−<br />
−<br />
−<br />
+<br />
−<br />
+<br />
−<br />
−<br />
−<br />
+<br />
−<br />
−<br />
−<br />
+<br />
−<br />
−<br />
+<br />
−<br />
+<br />
−<br />
−<br />
=<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
1<br />
2<br />
2<br />
4<br />
2<br />
4<br />
6<br />
2<br />
4<br />
6<br />
4<br />
2<br />
2<br />
4<br />
4<br />
4<br />
4<br />
6<br />
6<br />
4<br />
6<br />
4<br />
2<br />
6<br />
4<br />
2<br />
4<br />
6<br />
6<br />
6<br />
6<br />
4<br />
6<br />
4<br />
2<br />
6<br />
4<br />
2<br />
4<br />
6<br />
6<br />
4<br />
4<br />
4<br />
4<br />
2<br />
2<br />
4<br />
2<br />
4<br />
6<br />
2<br />
4<br />
6<br />
4<br />
2<br />
2<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
L
Where<br />
C<br />
C<br />
2<br />
6<br />
π 2π<br />
= 2cos<br />
; C4<br />
= 2cos<br />
=<br />
8<br />
8<br />
3π<br />
π<br />
= 2cos<br />
= 2sin<br />
8 8<br />
The matrix L can be factored as:<br />
L = B1 x M x A1 x A2 x A3<br />
with:<br />
2<br />
26
27<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎦<br />
⎤<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎣<br />
⎡<br />
−<br />
−<br />
−<br />
−<br />
−<br />
=<br />
1<br />
1<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
1<br />
0<br />
0<br />
1<br />
0<br />
1<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
1<br />
0<br />
1<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
1<br />
0<br />
0<br />
1<br />
1<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
1<br />
B<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎦<br />
⎤<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎣<br />
⎡<br />
−<br />
−<br />
−<br />
=<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
2<br />
6<br />
4<br />
6<br />
2<br />
4<br />
C<br />
C<br />
C<br />
C<br />
C<br />
C<br />
M
28<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎦<br />
⎤<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎣<br />
⎡<br />
−<br />
−<br />
−<br />
−<br />
−<br />
=<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
1<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
1<br />
1<br />
0<br />
1<br />
0<br />
1<br />
A<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎦<br />
⎤<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎣<br />
⎡<br />
−<br />
−<br />
−<br />
=<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
1<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
1<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
1<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
2<br />
A
29<br />
So the IDFT can be<br />
performed by 5<br />
steps:<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎥<br />
⎦<br />
⎤<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎢<br />
⎣<br />
⎡<br />
−<br />
−<br />
−<br />
−<br />
=<br />
0<br />
0<br />
0<br />
1<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
1<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
1<br />
0<br />
0<br />
1<br />
0<br />
0<br />
1<br />
0<br />
0<br />
0<br />
0<br />
0<br />
0<br />
1<br />
3<br />
A
30<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎩<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎨<br />
⎧<br />
+<br />
=<br />
−<br />
=<br />
−<br />
=<br />
+<br />
=<br />
+<br />
=<br />
−<br />
=<br />
+<br />
=<br />
−<br />
=<br />
=<br />
=<br />
2<br />
1<br />
)<br />
7<br />
(<br />
8<br />
1<br />
)<br />
1<br />
(<br />
8<br />
1<br />
2<br />
1<br />
)<br />
5<br />
(<br />
8<br />
1<br />
)<br />
3<br />
(<br />
8<br />
1<br />
2<br />
)<br />
7<br />
(<br />
8<br />
1<br />
)<br />
1<br />
(<br />
8<br />
1<br />
1<br />
)<br />
3<br />
(<br />
8<br />
1<br />
)<br />
5<br />
(<br />
8<br />
1<br />
)<br />
6<br />
(<br />
8<br />
1<br />
)<br />
2<br />
(<br />
8<br />
1<br />
)<br />
6<br />
(<br />
8<br />
1<br />
)<br />
2<br />
(<br />
8<br />
1<br />
)<br />
4<br />
(<br />
8<br />
1<br />
)<br />
0<br />
(<br />
16<br />
1<br />
:<br />
1<br />
7<br />
6<br />
5<br />
4<br />
3<br />
2<br />
1<br />
0<br />
temp<br />
temp<br />
a<br />
F<br />
F<br />
a<br />
temp<br />
temp<br />
a<br />
F<br />
F<br />
temp<br />
F<br />
F<br />
temp<br />
F<br />
F<br />
a<br />
F<br />
F<br />
a<br />
F<br />
F<br />
a<br />
F<br />
a<br />
F<br />
a<br />
B<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎩<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎨<br />
⎧<br />
=<br />
+<br />
−<br />
=<br />
=<br />
+<br />
−<br />
=<br />
=<br />
=<br />
=<br />
=<br />
7<br />
7<br />
2<br />
6<br />
6<br />
4<br />
6<br />
4<br />
5<br />
5<br />
6<br />
6<br />
2<br />
4<br />
4<br />
3<br />
3<br />
4<br />
2<br />
2<br />
1<br />
1<br />
0<br />
0<br />
)<br />
(<br />
)<br />
(<br />
:<br />
a<br />
b<br />
C<br />
a<br />
C<br />
a<br />
b<br />
C<br />
a<br />
b<br />
C<br />
a<br />
C<br />
a<br />
b<br />
a<br />
b<br />
c<br />
a<br />
b<br />
a<br />
b<br />
a<br />
b<br />
M
31<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎩<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎨<br />
⎧<br />
=<br />
=<br />
=<br />
=<br />
+<br />
=<br />
−<br />
=<br />
−<br />
=<br />
−<br />
=<br />
−<br />
=<br />
7<br />
7<br />
3<br />
6<br />
4<br />
5<br />
4<br />
1<br />
0<br />
3<br />
3<br />
2<br />
2<br />
1<br />
0<br />
1<br />
5<br />
0<br />
7<br />
6<br />
3<br />
3<br />
3<br />
:<br />
1<br />
b<br />
n<br />
b<br />
n<br />
b<br />
n<br />
temp<br />
n<br />
b<br />
b<br />
n<br />
b<br />
b<br />
n<br />
b<br />
b<br />
n<br />
b<br />
temp<br />
n<br />
b<br />
b<br />
temp<br />
A<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎩<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎨<br />
⎧<br />
−<br />
=<br />
−<br />
=<br />
−<br />
=<br />
+<br />
=<br />
+<br />
=<br />
=<br />
=<br />
=<br />
0<br />
5<br />
7<br />
6<br />
3<br />
6<br />
2<br />
1<br />
5<br />
6<br />
3<br />
4<br />
2<br />
1<br />
3<br />
4<br />
2<br />
0<br />
1<br />
7<br />
0<br />
:<br />
2<br />
n<br />
n<br />
m<br />
n<br />
n<br />
m<br />
n<br />
n<br />
m<br />
n<br />
n<br />
m<br />
n<br />
n<br />
m<br />
n<br />
m<br />
n<br />
m<br />
n<br />
m<br />
A<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎩<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎪<br />
⎨<br />
⎧<br />
−<br />
=<br />
−<br />
=<br />
+<br />
=<br />
+<br />
=<br />
−<br />
=<br />
−<br />
=<br />
+<br />
=<br />
+<br />
=<br />
0<br />
4<br />
2<br />
3<br />
1<br />
5<br />
7<br />
6<br />
7<br />
6<br />
1<br />
5<br />
2<br />
3<br />
0<br />
4<br />
)<br />
7<br />
(<br />
)<br />
6<br />
(<br />
)<br />
5<br />
(<br />
)<br />
4<br />
(<br />
)<br />
3<br />
(<br />
)<br />
2<br />
(<br />
)<br />
1<br />
(<br />
)<br />
0<br />
(<br />
:<br />
3<br />
m<br />
m<br />
f<br />
m<br />
m<br />
f<br />
m<br />
m<br />
f<br />
m<br />
m<br />
f<br />
m<br />
m<br />
f<br />
m<br />
m<br />
f<br />
m<br />
m<br />
f<br />
m<br />
m<br />
f<br />
A
32<br />
In part M, a simplification can be made:<br />
So define<br />
)<br />
(<br />
)<br />
(<br />
)<br />
(<br />
)<br />
(<br />
)<br />
(<br />
6<br />
2<br />
6<br />
6<br />
4<br />
6<br />
6<br />
6<br />
6<br />
6<br />
2<br />
6<br />
6<br />
4<br />
2<br />
6<br />
6<br />
4<br />
2<br />
6<br />
2<br />
4<br />
6<br />
4<br />
6<br />
6<br />
4<br />
6<br />
4<br />
6<br />
6<br />
2<br />
4<br />
6<br />
6<br />
2<br />
4<br />
4<br />
C<br />
C<br />
a<br />
a<br />
a<br />
C<br />
C<br />
a<br />
C<br />
a<br />
C<br />
a<br />
C<br />
a<br />
C<br />
a<br />
C<br />
a<br />
b<br />
C<br />
C<br />
a<br />
a<br />
a<br />
C<br />
C<br />
a<br />
C<br />
a<br />
C<br />
a<br />
C<br />
a<br />
C<br />
a<br />
C<br />
a<br />
b<br />
+<br />
+<br />
+<br />
−<br />
=<br />
+<br />
−<br />
+<br />
−<br />
=<br />
+<br />
−<br />
=<br />
−<br />
−<br />
+<br />
−<br />
=<br />
+<br />
−<br />
−<br />
−<br />
=<br />
+<br />
−<br />
=<br />
4<br />
4<br />
)<br />
(<br />
4<br />
and<br />
6<br />
6<br />
4<br />
4<br />
6<br />
4<br />
6<br />
6<br />
2<br />
6<br />
2<br />
temp<br />
Ra<br />
b<br />
temp<br />
Qa<br />
b<br />
a<br />
a<br />
C<br />
temp<br />
C<br />
C<br />
R<br />
C<br />
C<br />
Q<br />
−<br />
=<br />
−<br />
−<br />
=<br />
+<br />
=<br />
+<br />
=<br />
−<br />
=
If you count the operations you will get 29<br />
additions and 5 multiplications.<br />
Because an 8x8 2-D <strong>DCT</strong> can be computed by<br />
applying 8-point 1-D <strong>DCT</strong> to each row and<br />
each column of the 2D data. Therefore,<br />
2x8x29 = 464 additions and 2x8x5 = 80<br />
multiplications are required in total.<br />
A more efficient <strong>DCT</strong> algorithm has been<br />
proposed by Feig and Winograd in IEEE Trans.<br />
on ASSP, pp. 2174-2193, 1992.<br />
33