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

三、使用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) 讀取原圖

            1cv2.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
(4)經過壓縮 & 解壓縮後的img3

五、參考資料

六、實作影片









留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1091537 Homework #1