其水平的頻率會由左而右逐漸增加,垂直方向的頻率會由上至下逐漸增加,對第 (u,v) 個 basis function 來說,可拆 8x8 個格子,其第(m,n)的值可寫成
可用dct_basis.py
產生下圖。
$ python dctbasis.py
DCT 可以把圖片中高頻跟低頻分離出來,因為人對於高頻也就是小範圍高複雜的辨認能力差,反之對於低頻較敏感,所以可以藉由 Quantization 把高頻部分壓縮,來達到犧牲掉肉眼不易分辨的資訊的效果。
[[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.]]
$ 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]
[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
[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
$ python dct_b.py
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
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
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up