研究完 JPEG 點樣壓縮圖片…

真係超級無敵聰明…

點解咁聰明既方法都會被人諗到…
原帖由 點虫虫~~ 於 2008-5-5 00:12 發表
bmp每一點既顏色都要由一個數字去
一個16x16 pixal 既256色 bmp 就會16x16x256=65536 咁多bit去store
但係好多時一張圖有好多部分既顏色一樣, 咁就可以用一d方法去一次過記多d
不過個方法係點..................... ...
呢個唔係 jpeg 用既原理,反而係 png/gif 用…
而且…咁係唔會做成 loss!
簡單咁講下啦…

1. 把影像由RGB(紅綠藍)轉換為一種稱為YUV的不同色彩空間
2. YUV 的 Y 表示一個像素的亮度
3. U 和 V 成份一起表示色調與飽和度。
4. 人類的眼睛在 Y 成份可以比 U 和 V 看得更仔細。
5. 因此,U和V 可以只用較低的解像度,X 和 Y 軸都是每 2 點抽 1,這就是 YUV420
6. 把影像分成 8x8 的 block
7. 將每個 pixel 的數值 -128(使 range 由 0-255 變成 -128-127)
8. 將每個 pixel 利用下面的式進行 2D-DCT (Discrete cosine transform)

9. 結果會把主要的資料推到教前的位置,第一個數 (0,0) 為 DC Coeff,期餘為 AC Coeff
10. 把這堆資料量化,除一個 matrix,捨棄小數再捨棄一堆 = 0 的數(這是最主要會做成 loss 的一步)!
11. 那麼,一個 8x8 = 64 個 coeff 的數可以跟據需要,要求的質素,變成只有約 10-30 個 coeff 的一堆數。
12. 把這堆數執行 entropy coding

結果…原本 8bit / pixel 可以變成約 0.3-5 bit / pixel!
一般來說對一張有連續色調變化的相,即沒有太多高頻資訊,JPEG 在 20:1 的壓縮率都沒有明顯的 loss!