s1083510 Homework #5

 

主題:影像壓縮練習 Run-Length Based Image Compression

專案目標:

設計一個基於Run-Length的壓縮方法,對附檔的三張將晶片高度以色彩視覺化後的圖檔作無失真壓縮,並儲存成新檔案,再計算三張圖的平均壓縮率。

 

開發平台:Microsoft Windows 11, Visual Studio Code (version 1.86), OpenCV 4.9.0, python 3.11.5

 

    專案說明:

    在進行RLE壓縮時,我用numpy下的flatten()來計算圖像像素連續出現的次數(因將圖像數據轉為一維數組較容易做操作)。最後便可知道一個像素值及其餘圖像中連續出現的次數。

    首先,把三張BMP檔讀進來,再把此彩色圖像分為紅色(R)、綠色(G)和藍色(B)三個通道,並運用上述的RLE方法去對此三個通道做編碼後,寫入壓縮檔。運用valuecount來記錄數值及其出現的次數。

計算原始圖像的數據大小(height*width*3通道數),以及計算壓縮數據的大小(value, count),如此便可得知Compression Ratio (Compression Ratio = Original Size/Compressed Size),即原始數據大小與壓縮以後的數據大小的比值。

最後,使用with打開文件,寫入壓縮後的數據(包含像素值和連續出現次數),並將壓縮後的檔案儲存到資料夾中。

解壓縮為原始檔案:解壓縮上述被我們壓縮過後的RLE檔,解析三個通道長度編碼數據,並解壓縮為圖像數據,再合併成一個彩色圖像後輸出。


結果輸出:

圖中顯示原始BMP檔案和壓縮過後存成RLE檔案的大小:

Compression RatioCompression Ratio = Original Size / Compressed Size):

img_12.47

img_21.43

img_32.69

此圖為解壓縮後的無失真原檔:


以下顯示,對BMP檔做無失真壓縮後解壓縮的結果。

上圖皆為原始BMP檔,下圖為經過無失真壓縮後的解壓縮BMP檔:

img_1




img_2



img_3



下圖為三張圖各自的壓縮率平均壓縮率








留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1061637 作業6