作業說明:
附件中為三張利用將高度以色彩視覺化後的圖片。
請設計一個基於Run-Length的壓縮方法,對圖檔作無失真壓縮後儲存成新檔案。
部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率(compression ratio)。
開發環境:
l Windows 10
l Visual Studio 2019
l Python 3.8
l OpenCV 4.5.1
程式說明:
壓縮檔案:
1. 使用 cv2.split() 將各個 rgb 通道分離
2. 分別將各個通道 rgb 值用 Run-length encoding 轉成一維 uint8 陣列,以第一個為 rgb 值,第二個為出現次數的方式儲存
3. 若同一個數值數量超過 uint8 可以儲存的數量,則分為多個陣列儲存
4. 將步驟2. 得到的陣列以及圖片的寬高存入檔案,並命名為:圖片名字 + _compress.s1061420
解壓縮檔案:
1. 得到各個 rgb 通道的值,並 reshape 為二維陣列
2. 將 rgb 通道 merge 為圖片
3. 將圖片存為:圖片名字 + _decompress.bmp
輸出結果:
img1原圖
img1 解壓縮後的圖 img1_decompress.bmp
img2 原圖
img2 解壓縮後的圖 img2_decompress.bmp
img3原圖
img3 解壓縮後的圖 img3_decompress.bmp
平均壓縮率 = ( 13.9 / 2.10 + 13.9 / 3.46 + 13.9 / 2.00 ) / 3 = 5.86
img1比較
由左至右分別為:原圖 -> 壓縮檔 -> 解壓縮後的圖
img2比較
img3比較
沒有留言:
張貼留言