2021年6月6日 星期日

s1071441 的作業 6

 一、作業說明

附件中為三張利用將高度以色彩視覺化後的圖片。請設計一個基於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 / 3.45 = 4.028


img3.bmp



壓縮率 : 13.9 / 2.00 = 6.95

平均壓縮率 : (13.9 * 3) / (2.1 + 3.45 + 2.0) = 5.523
倒數 : 18.1 %

分析 : 如果能更有效的控制儲存數量用的byte數,還能更有效率的壓縮

沒有留言:

張貼留言