一、作業說明:
請設計一個基於Run-Length的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率(compression ratio)。
二、使用環境:
作業系統 : windows10
編譯軟體: Visual Studio Code
使用語言: python 3.9.2/opencv 4.1.2/numpy-1.20.1
三、方法:
壓縮:
1. 以 split()切分成r,g,b通道
2. 用flatten()將r,g,b轉成1維陣列
3. 使用RLE方式對B,G,R做壓縮
4. 將壓縮好的資料以{height,width,{數量1,字元1},{數量2,字元2}...}的方式儲存。
解壓縮:
1. 讀取height,width和B,G,R資料
2. 以np.array()將list轉換成uint8存入array
3. 用reshape()將array轉成(height, width, channel)
4. 用merge()將r,g,b合併成圖片
四、執行結果:
原圖:
解壓縮率: 100%-(8535968/14665254*100%)=42%
原圖:
解壓縮還原:
解壓縮率:
原圖:
解壓縮還原:
解壓縮率:
平均壓縮率:
沒有留言:
張貼留言