1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
| A= Matrix([[27,45,18],[36,27,36],[36,54,27]]); print A
> [27 45 18]\n[36 27 36]\n[36 54 27]
def encodingDCT(A,n):
nlist = []
for i in range(0,n):
for j in range(0,n):
b=0
for x in range(0,n):
for y in range(0,n):
b=b+A[x][y]*cos(((2*x+1)*i*pi)/(2*n))*cos(((2*y+1)*j*pi)/(2*n))/n
nlist.append(b)
#print b,
#print
return nlist
encodingDCT(A,3)
> [102, 3*sqrt(3), -12, -9/2*sqrt(3), 0, 0, 3/2, 3/2*sqrt(3), -21/2]
def encodingDCT_floor(A,n):
nlist = []
for i in range(0,n):
for j in range(0,n):
b=0
for x in range(0,n):
for y in range(0,n):
b=b+A[x][y]*cos(((2*x+1)*i*pi)/(2*n))*cos(((2*y+1)*j*pi)/(2*n))/n
nlist.append(b)
print floor(b),
#print
return
encodingDCT_floor(A,3)
> 102 5 -12 -8 0 0 1 2 -11
def quantifTable(n):
nlist = []
for x in range(0,n):
for y in range(0,n):
if x>=y:
z=x
else:
z=y
a=4-z
#print a,
#print
nlist.append(a)
return nlist
quantifTable(3)
> [4, 3, 2, 3, 3, 2, 2, 2, 2]
def quantification(A,B,n):
k=0
for x in range(0,n):
#for y in range(0,n):
k=k+1
z=floor(A[x]/B[x])
print z,
if (mod(k,3)==0):
print
quantification(encodingDCT(A,3),quantifTable(3),9)
> 25 1 -6\n-3 0 0\n0 1 -6
|