一、作業說明
附件中為三張利用將高度以色彩視覺化後的圖片。請設計一個基於Run-Length的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率(compression ratio)。
二、作業環境&語言
Windows 10
Visual Studio Code 1.54.3
OpenCV 4.5.1.48
Python 3.8.3
Numpy 1.19.5
三、實作方法
compress:
cv2.imread 讀取bmp
cv2.split 將b, g, r 通道分開,分開做run length 就可以不用三通都一樣才能合併
將三通道都 reshape 成 1維
三通道個別做run length encoding
轉換成byte的形式
重複值的數量用 1 byte 存,超過的分割存,channel的值也用1 byte 存
header放 圖片長寬、 bgr的長度
存成二元檔
decompress:
將header的資訊個別讀出來
將三通道的run length 結果讀出來
將 bytes 轉回 int
將run length encoding 轉回 1維陣列
reshape 回圖片長寬
將b, g, r三通道合併成最後的結果
四、執行結果和分析
img1.bmp
壓縮率 : 13.9 / 2.10 = 6.619
img2.bmp
壓縮率 : 13.9 / 2.00 = 6.95
平均壓縮率 : (13.9 * 3) / (2.1 + 3.45 + 2.0) = 5.523
倒數 : 18.1 %
分析 : 如果能更有效的控制儲存數量用的byte數,還能更有效率的壓縮
沒有留言:
張貼留言