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與主程式
留言
張貼留言