“Sage code: DCT matrix” (2_16.sage) download
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