s1091509 作業6

 

Assignment 6 : Run-Length Based Image Compression

程式功能:

A.      將圖片以Run-Length的方式壓縮成txt檔

B.      讀取壓縮的txt檔進行解壓縮

C.      對原圖bmp檔案與壓縮txt檔案進行計算,得檔案大小與compression ratio             


開發環境:

Windows 10 + Anaconda + python=3.9 + OpenCV=4.7.0


程式解說:

a.       壓縮方式

我實作的run-length的壓縮方式如下:

先記錄一張圖片的長與寬,

   之後比較一個pixel與下一個pixel之間差異,如果相等則記錄RGB的值與重複的次數(並非針對RGB通道分別壓縮,雖然這個方式壓縮率應該會更好)。

example:   有連續3個pixel的像素為(1, 2, 3), (1, 2, 3), (4, 5, 6),則經過run-length之後會變成(1, 2, 3, 2), (4, 5, 6, 1)

b. 解壓縮方式

讀取壓縮txt檔後,一樣先讀取圖片的長與寬,建立一張空白的圖,再將編碼進行run-lengh decode。


c.  計算compression ratio

    使用os套件讀取兩個檔案的大小,並計算出compression ratio(這邊採用老師ppt的計算方式,b/b')。這三張圖的compression ratio分別是: 1.15、0.66(更糟)、1.19。在第二張圖片效果會更差的原因是因為這張圖片相鄰pixel之間雖然差異不大,但也沒有完全一樣,導致最後反而因為每個pixel都用更長的編碼表示而更爛。這個問題可以通過分別對RGB通道進行run-length解決。


範例圖片與程式碼 :

1. compression ratio function與主程式



2. 執行結果


留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1091537 Homework #1