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方法去對此三個通道做編碼後,寫入壓縮檔。運用value和count來記錄數值及其出現的次數。
計算原始圖像的數據大小(height*width*3通道數),以及計算壓縮數據的大小(value, count),如此便可得知Compression Ratio (Compression Ratio = Original Size/Compressed
Size),即原始數據大小與壓縮以後的數據大小的比值。
最後,使用with打開文件,寫入壓縮後的數據(包含像素值和連續出現次數),並將壓縮後的檔案儲存到資料夾中。
解壓縮為原始檔案:解壓縮上述被我們壓縮過後的RLE檔,解析三個通道長度編碼數據,並解壓縮為圖像數據,再合併成一個彩色圖像後輸出。
結果輸出:
圖中顯示原始BMP檔案和壓縮過後存成RLE檔案的大小:
Compression Ratio(Compression Ratio = Original Size /
Compressed Size):
img_1:2.47
img_2:1.43
img_3:2.69
此圖為解壓縮後的無失真原檔:
以下顯示,對BMP檔做無失真壓縮後解壓縮的結果。
上圖皆為原始BMP檔,下圖為經過無失真壓縮後的解壓縮BMP檔:
img_1
留言
張貼留言