s1083350 作業6
主題 Run-Length Based Image Compression 練習
一、題目說明
附件中為三張利用將晶片高度以色彩視覺化後的圖片。
請設計一個基於 Run-Length 的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。
部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率
(compression ratio)。
二、開發環境
OS:Windows 10
Editor:Visual Studio Code
Language:Python 3.9.13
Package:OpenCV - 4.6.0
三、程式碼說明
以cv2.imread()讀入圖片
並以 cv2.split() 將其分成r,g,b三通道
Encoding(RLE) 對三通道分別編碼。
RLE的概念是,假設有一個像素序列 [255, 255, 255, 0, 0, 0, 0, 0],RLE壓縮的結果可能是 [(3, 255), (5, 0)],其中 (3, 255) 表示有3個連續的像素值255,(5, 0) 表示有5個連續的像素值0,以這編碼邏輯來將圖像壓縮成一串數碼。
接著是RLE解碼(解壓縮),即照著編碼邏輯還原出圖像
壓縮後的編碼我將它存成文字檔
最後是三通道分別解碼後需要再用cv2.merge() 合併三通道以還原圖像
下圖由左而右為
img1的資訊及其內容,Run-Length壓縮的文字檔,還原的img1圖像
下圖由左而右為
img2的資訊及其內容,Run-Length壓縮的文字檔,還原的img2圖像
img2的壓縮率為 14,665,254/10,230,745 = 1.4334493 約等於143%
下圖由左而右為
img3的資訊及其內容,Run-Length壓縮的文字檔,還原的img3圖像
平均壓縮率為 (247+143+269)/3 約等於220%
留言
張貼留言