# Video Compression Homework2 ## 1 ### a 其水平的頻率會由左而右逐漸增加,垂直方向的頻率會由上至下逐漸增加,對第 (u,v) 個 basis function 來說,可拆 8x8 個格子,其第(m,n)的值可寫成 $\frac{1}{4}c(u)c(v)\cos \left(\frac{(2 m+1) u \pi)}{16}\right) \cos \left(\frac{(2 n+1) v \pi}{16}\right)$ 可用`dct_basis.py` 產生下圖。 ```shell $ python dctbasis.py ``` <img src="https://i.imgur.com/VfV4Aef.png" alt="drawing" width="400"/> ### b DCT 可以把圖片中高頻跟低頻分離出來,因為人對於高頻也就是小範圍高複雜的辨認能力差,反之對於低頻較敏感,所以可以藉由 Quantization 把高頻部分壓縮,來達到犧牲掉肉眼不易分辨的資訊的效果。 ## 2 ### Question ``` [[201. 192. 183. 180. 168. 154. 144. 128.] [116. 96. 84. 70. 61. 56. 53. 52.] [ 53. 42. 39. 37. 39. 39. 39. 38.] [ 40. 65. 91. 55. 52. 125. 170. 168.] [162. 140. 122. 90. 57. 58. 44. 59.] [ 60. 74. 67. 61. 58. 61. 57. 56.] [ 63. 63. 75. 61. 66. 53. 53. 53.] [ 46. 46. 44. 50. 52. 47. 55. 57.]] ``` ### a ```shell $ python dct_a.py ``` After DCT ``` [[642.5 50.44 34.22 -8.87 -15.25 6.27 7.48 1.99] [164.75 31.96 9.13 10.85 -1.63 7.51 1.19 -1.95] [ 57.92 37.42 -41.51 18.26 26.03 -4. -12.76 5.37] [162.38 91.34 -15.61 3.39 6.5 -5.71 -0.63 -4.13] [168.75 -14.62 21.4 -10.77 -13.5 7.98 3.31 -4.82] [ 75.29 -94.95 -8.81 -10.69 -22.27 4.49 0.2 7.22] [-24.8 -13.29 -19.76 9.06 6. -4.16 -8.99 -4.82] [ -7.64 105.56 -12.45 11.6 27.59 -4.08 2.56 0.66]] ``` ZigZag Scan ``` [642.5 50.44 164.75 57.92 31.96 34.22 -8.87 9.13 37.42 162.38 168.75 91.34 -41.51 10.85 -15.25 6.27 -1.63 18.26 -15.61 -14.62 75.29 -24.8 -94.95 21.4 3.39 26.03 7.51 7.48 1.99 1.19 -4. 6.5 -10.77 -8.81 -13.29 -7.64 105.56 -19.76 -10.69 -13.5 -5.71 -12.76 -1.95 5.37 -0.63 7.98 -22.27 9.06 -12.45 11.6 6. 4.49 3.31 -4.13 -4.82 0.2 -4.16 27.59 -4.08 -8.99 7.22 -4.82 2.56 0.66] ``` #### n = 3 ``` [642.5 50.44 164.75] ``` After Inverse ZigZag Scan ``` [[642.5 50.44 0. 0. 0. 0. 0. 0. ] [164.75 0. 0. 0. 0. 0. 0. 0. ] [ 0. 0. 0. 0. 0. 0. 0. 0. ] [ 0. 0. 0. 0. 0. 0. 0. 0. ] [ 0. 0. 0. 0. 0. 0. 0. 0. ] [ 0. 0. 0. 0. 0. 0. 0. 0. ] [ 0. 0. 0. 0. 0. 0. 0. 0. ] [ 0. 0. 0. 0. 0. 0. 0. 0. ]] ``` After IDCT ``` [[117.62 116.29 113.83 110.62 107.14 103.92 101.46 100.13] [113.27 111.94 109.48 106.27 102.79 99.57 97.11 95.78] [105.24 103.91 101.45 98.23 94.75 91.54 89.08 87.75] [ 94.74 93.41 90.95 87.73 84.25 81.04 78.58 77.25] [ 83.38 82.04 79.58 76.37 72.89 69.68 67.22 65.89] [ 72.88 71.55 69.09 65.87 62.39 59.18 56.72 55.39] [ 64.84 63.51 61.05 57.84 54.36 51.14 48.68 47.35] [ 60.49 59.16 56.7 53.49 50.01 46.79 44.33 43. ]] ``` **MSE = 1629.8346** #### n = 10 ``` [642.5 50.44 164.75 57.92 31.96 34.22 -8.87 9.13 37.42 162.38] ``` After Inverse ZigZag Scan ``` [[642.5 50.44 34.22 -8.87 0. 0. 0. 0. ] [164.75 31.96 9.13 0. 0. 0. 0. 0. ] [ 57.92 37.42 0. 0. 0. 0. 0. 0. ] [162.38 0. 0. 0. 0. 0. 0. 0. ] [ 0. 0. 0. 0. 0. 0. 0. 0. ] [ 0. 0. 0. 0. 0. 0. 0. 0. ] [ 0. 0. 0. 0. 0. 0. 0. 0. ] [ 0. 0. 0. 0. 0. 0. 0. 0. ]] ``` After IDCT ``` [[173.47 166.8 154.68 140.37 128.72 123.38 123.95 126.25] [127.66 122.11 111.98 100.11 90.9 87.63 89.67 92.72] [ 79.46 75.66 68.59 60.44 54.88 54.65 58.79 62.9 ] [ 67.08 64.9 60.66 55.82 53.36 55.55 61.24 66.09] [ 83.73 82.5 79.8 76.56 75.32 78.15 84.03 88.86] [ 92.36 91.25 88.57 85. 82.91 84.5 89.15 93.21] [ 73.88 72.37 68.82 63.79 59.77 59.24 62.03 65.01] [ 49.09 47.19 42.82 36.59 31.05 28.94 30.41 32.63]] ``` **MSE = 1106.754** ### b ```shell $ python dct_b.py ``` #### n = 5 After Quantization ``` [[128. 10. 7. -2. -3. 1. 1. 0.] [ 33. 6. 2. 2. -0. 2. 0. -0.] [ 12. 7. -8. 4. 5. -1. -3. 1.] [ 32. 18. -3. 1. 1. -1. -0. -1.] [ 34. -3. 4. -2. -3. 2. 1. -1.] [ 15. -19. -2. -2. -4. 1. 0. 1.] [ -5. -3. -4. 2. 1. -1. -2. -1.] [ -2. 21. -2. 2. 6. -1. 1. 0.]] ``` After Inverse Quantization ``` [[640. 50. 35. -10. -15. 5. 5. 0.] [165. 30. 10. 10. -0. 10. 0. -0.] [ 60. 35. -40. 20. 25. -5. -15. 5.] [160. 90. -15. 5. 5. -5. -0. -5.] [170. -15. 20. -10. -15. 10. 5. -5.] [ 75. -95. -10. -10. -20. 5. 0. 5.] [-25. -15. -20. 10. 5. -5. -10. -5.] [-10. 105. -10. 10. 30. -5. 5. 0.]] ``` After IDCT ``` [[199.97 190.94 180.01 179.95 167.19 154.63 146.53 128.81] [115.79 97.18 83.85 69.48 61.38 53.52 54.98 52.66] [ 52.22 41.95 37.44 37.16 38.99 35.95 37.5 40.29] [ 39.9 64.84 91.72 58. 52.33 124.58 169.57 166.06] [161.45 138.44 122.8 88.76 54.17 57.07 41.48 59.1 ] [ 57.82 75.57 65.05 59.8 57.45 61.41 56.99 54.13] [ 62.77 64.08 72.38 61.32 64.82 52.28 49.88 53.91] [ 45.04 49.02 43.87 49.62 52.7 48.62 55.87 56.95]] ``` **MSE = 2.1344829** #### n = 20 After Quantization ``` [[32. 3. 2. -0. -1. 0. 0. 0.] [ 8. 2. 0. 1. -0. 0. 0. -0.] [ 3. 2. -2. 1. 1. -0. -1. 0.] [ 8. 5. -1. 0. 0. -0. -0. -0.] [ 8. -1. 1. -1. -1. 0. 0. -0.] [ 4. -5. -0. -1. -1. 0. 0. 0.] [-1. -1. -1. 0. 0. -0. -0. -0.] [-0. 5. -1. 1. 1. -0. 0. 0.]] ``` AFter Inverse Quantization ``` [[ 640. 60. 40. -0. -20. 0. 0. 0.] [ 160. 40. 0. 20. -0. 0. 0. -0.] [ 60. 40. -40. 20. 20. -0. -20. 0.] [ 160. 100. -20. 0. 0. -0. -0. -0.] [ 160. -20. 20. -20. -20. 0. 0. -0.] [ 80. -100. -0. -20. -20. 0. 0. 0.] [ -20. -20. -20. 0. 0. -0. -0. -0.] [ -0. 100. -20. 20. 20. -0. 0. 0.]] ``` After IDCT ``` [[196.31 201.76 184.36 176.26 166.87 152.59 143.57 118.77] [126.75 101.65 72.6 68.21 66.94 54.88 45.27 35.34] [ 57.15 42.79 36.97 36.65 44.04 48.91 41.36 39.37] [ 37.51 70.15 84.78 47.28 51.67 116.81 159.43 177.31] [158.74 140.37 122.46 84.52 62.2 59. 45.57 47.07] [ 65.89 72.66 75.66 59.88 51.65 57.43 56.42 55.94] [ 70.51 72.58 66.91 65.37 61.12 55.81 58.09 55.18] [ 42.62 50.23 41.75 46.12 46.68 45.78 61.39 60.07]] ``` **MSE = 34.86187**