Filarius

dct8x8

Sep 8th, 2018
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.30 KB | None | 0 0
  1. def  DCT8x8(data):
  2.     tmp = np.zeros((64,),dtype=np.int32)
  3.     result = np.zeros((64,),dtype=np.int32)
  4.     for i in range(8):
  5.         p0 = data[i * 8 + 0]
  6.         p1 = data[i * 8 + 1]
  7.         p2 = data[i * 8 + 2]
  8.         p3 = data[i * 8 + 3]
  9.         p4 = data[i * 8 + 4]
  10.         p5 = data[i * 8 + 5]
  11.         p6 = data[i * 8 + 6]
  12.         p7 = data[i * 8 + 7]
  13.         a0 = p0 + p7
  14.         a1 = p1 + p6
  15.         a2 = p2 + p5
  16.         a3 = p3 + p4
  17.         b0 = a0 + a3
  18.         b1 = a1 + a2
  19.         b2 = a0 - a3
  20.         b3 = a1 - a2
  21.         a0 = p0 - p7
  22.         a1 = p1 - p6
  23.         a2 = p2 - p5
  24.         a3 = p3 - p4
  25.         b4 = a1 + a2 + ((a0 >> 1) + a0)
  26.         b5 = a0 - a3 - ((a2 >> 1) + a2)
  27.         b6 = a0 + a3 - ((a1 >> 1) + a1)
  28.         b7 = a1 - a2 + ((a3 >> 1) + a3)
  29.         tmp[i * 8 + 0] = b0 + b1
  30.         tmp[i * 8 + 1] = b4 + (b7 >> 2)
  31.         tmp[i * 8 + 2] = b2 + (b3 >> 1)
  32.         tmp[i * 8 + 3] = b5 + (b6 >> 2)
  33.         tmp[i * 8 + 4] = b0 - b1
  34.         tmp[i * 8 + 5] = b6 - (b5 >> 2)
  35.         tmp[i * 8 + 6] = (b2 >> 1) - b3
  36.         tmp[i * 8 + 7] = (b4 >> 2) - b7
  37.     for i in range(8):
  38.         p0 = tmp[0 * 8 + i]
  39.         p1 = tmp[1 * 8 + i]
  40.         p2 = tmp[2 * 8 + i]
  41.         p3 = tmp[3 * 8 + i]
  42.         p4 = tmp[4 * 8 + i]
  43.         p5 = tmp[5 * 8 + i]
  44.         p6 = tmp[6 * 8 + i]
  45.         p7 = tmp[7 * 8 + i]
  46.         a0 = p0 + p7
  47.         a1 = p1 + p6
  48.         a2 = p2 + p5
  49.         a3 = p3 + p4
  50.         b0 = a0 + a3
  51.         b1 = a1 + a2
  52.         b2 = a0 - a3
  53.         b3 = a1 - a2
  54.         a0 = p0 - p7
  55.         a1 = p1 - p6
  56.         a2 = p2 - p5
  57.         a3 = p3 - p4
  58.         b4 = a1 + a2 + ((a0 >> 1) + a0)
  59.         b5 = a0 - a3 - ((a2 >> 1) + a2)
  60.         b6 = a0 + a3 - ((a1 >> 1) + a1)
  61.         b7 = a1 - a2 + ((a3 >> 1) + a3)
  62.         result[0 * 8 + i] = b0 + b1
  63.         result[1 * 8 + i] = b4 + (b7 >> 2)
  64.         result[2 * 8 + i] = b2 + (b3 >> 1)
  65.         result[3 * 8 + i] = b5 + (b6 >> 2)
  66.         result[4 * 8 + i] = b0 - b1
  67.         result[5 * 8 + i] = b6 - (b5 >> 2)
  68.         result[6 * 8 + i] = (b2 >> 1) - b3
  69.         result[7 * 8 + i] = (b4 >> 2) - b7
  70.     return result
  71.  
  72. def IDCT8x8(data):
  73.     tmp = np.zeros((64,), dtype=np.int32)
  74.     result = np.zeros((64,), dtype=np.int32)
  75.     for i in range(8):
  76.         p0 = data[i * 8 + 0]
  77.         p1 = data[i * 8 + 1]
  78.         p2 = data[i * 8 + 2]
  79.         p3 = data[i * 8 + 3]
  80.         p4 = data[i * 8 + 4]
  81.         p5 = data[i * 8 + 5]
  82.         p6 = data[i * 8 + 6]
  83.         p7 = data[i * 8 + 7]
  84.         a0 = p0 + p4
  85.         a1 = p0 - p4
  86.         a2 = p6 - (p2 >> 1)
  87.         a3 = p2 + (p6 >> 1)
  88.         b0 = a0 + a3
  89.         b2 = a1 - a2
  90.         b4 = a1 + a2
  91.         b6 = a0 - a3
  92.         a0 = -p3 + p5 - p7 - (p7 >> 1)
  93.         a1 = p1 + p7 - p3 - (p3 >> 1)
  94.         a2 = -p1 + p7 + p5 + (p5 >> 1)
  95.         a3 = p3 + p5 + p1 + (p1 >> 1)
  96.         b1 = a0 + (a3 >> 2)
  97.         b3 = a1 + (a2 >> 2)
  98.         b5 = a2 - (a1 >> 2)
  99.         b7 = a3 - (a0 >> 2)
  100.         tmp[i * 8 + 0] = b0 + b7
  101.         tmp[i * 8 + 1] = b2 - b5
  102.         tmp[i * 8 + 2] = b4 + b3
  103.         tmp[i * 8 + 3] = b6 + b1
  104.         tmp[i * 8 + 4] = b6 - b1
  105.         tmp[i * 8 + 5] = b4 - b3
  106.         tmp[i * 8 + 6] = b2 + b5
  107.         tmp[i * 8 + 7] = b0 - b7
  108.     for i in range(8):
  109.         p0 = tmp[0 * 8 + i]
  110.         p1 = tmp[1 * 8 + i]
  111.         p2 = tmp[2 * 8 + i]
  112.         p3 = tmp[3 * 8 + i]
  113.         p4 = tmp[4 * 8 + i]
  114.         p5 = tmp[5 * 8 + i]
  115.         p6 = tmp[6 * 8 + i]
  116.         p7 = tmp[7 * 8 + i]
  117.         a0 = p0 + p4
  118.         a1 = p0 - p4
  119.         a2 = p6 - (p2 >> 1)
  120.         a3 = p2 + (p6 >> 1)
  121.         b0 = a0 + a3
  122.         b2 = a1 - a2
  123.         b4 = a1 + a2
  124.         b6 = a0 - a3
  125.         a0 = -p3 + p5 - p7 - (p7 >> 1)
  126.         a1 = p1 + p7 - p3 - (p3 >> 1)
  127.         a2 = -p1 + p7 + p5 + (p5 >> 1)
  128.         a3 = p3 + p5 + p1 + (p1 >> 1)
  129.         b1 = a0 + (a3 >> 2)
  130.         b7 = a3 - (a0 >> 2)
  131.         b3 = a1 + (a2 >> 2)
  132.         b5 = a2 - (a1 >> 2)
  133.         result[0 * 8 + i] = ((b0 + b7) >> 6)
  134.         result[1 * 8 + i] = ((b2 - b5) >> 6)
  135.         result[2 * 8 + i] = ((b4 + b3) >> 6)
  136.         result[3 * 8 + i] = ((b6 + b1) >> 6)
  137.         result[4 * 8 + i] = ((b6 - b1) >> 6)
  138.         result[5 * 8 + i] = ((b4 - b3) >> 6)
  139.         result[6 * 8 + i] = ((b2 + b5) >> 6)
  140.         result[7 * 8 + i] = ((b0 - b7) >> 6)
  141.     result = result.clip(0,255)
  142.     return result
Advertisement
Add Comment
Please, Sign In to add comment