s1091438 作業6
Run-Length Based Image Compression 練習
一、題目說明
附件中為三張利用將晶片高度以色彩視覺化後的圖片。
請設計一個基於 Run-Length 的壓縮法
方,對圖檔作無失真壓縮後儲存成新檔案。
部落格上應敘述你的壓縮方法,提供壓縮檔之格式,
並計算三張圖的平均壓縮率(compression ratio)。
二、開發環境
OS : Windows 11
Editor : Visual Studio Code
Language : Python
Package : OpenCV - 4.7.0
Editor : Visual Studio Code
Language : Python
Package : OpenCV - 4.7.0
三、使用Function說明 & 步驟
(a) 定義 Run-Length Function
1. 思路
假設,有一個數據序列 [1, 1, 1, 2, 2, 3, 4, 4, 4, 4],將它用 RLE 進行壓縮。壓縮後的結果為
[(1, 3), (2, 2), (3, 1), (4, 4)],表示原始數據序列中有 3 個連續的 1,2 個連續的 2,1 個 3,
以及 4 個連續的 4。
而在解壓縮時,根據壓縮結果中的 <重複的數據值,該值連續重複出現的次數> 來進行還
還原。
2. 因此,我定義了兩個函式:
(1) run_length_encode() : 對圖像進行 Run-Length 編碼
(2) run_length_decode() : 對壓縮後的資料進行解碼並還原為圖像
(b) 讀取原圖
1. cv2.imread() : 從檔案中分別讀取原圖img1、img2、img3
(c) 壓縮 & 計算平均壓縮率 & 解壓縮
1. 將img1、img2、img3分別傳入run_length_encode()進行編碼,並將連續重複
出現的數據序列進行壓縮
2. 計算平均壓縮率 :
平均壓縮率 = (len(compressed_data1) + len(compressed_data2) +
len(compressed_data3)) / (img1.size + img2.size + img3.size)
3. 將compressed_data1~3 和 img1~3 分別傳入run_length_decode()進行解壓縮,還原圖片
(d) 儲存 & 輸出平均壓縮率
1. cv2.imwrite() : 將解壓縮後的圖片儲存
四、實作例圖
(1)輸出平均壓縮率
(2)經過壓縮 & 解壓縮後的img1
(3)經過壓縮 & 解壓縮後的img2
留言
張貼留言