1.作業說明:
附件中為三張利用將高度以色彩視覺化後的圖片。請設計一個基於Run-Length的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。
部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率(compression ratio)。
部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率(compression ratio)。
2.作業環境
作業系統: Windows 10
程式語言:Python 3.8.5
編譯器:Spyder 4
使用python套件:
openCV 4.5.1
numpy 1.20.2
程式語言:Python 3.8.5
編譯器:Spyder 4
使用python套件:
openCV 4.5.1
numpy 1.20.2
3.操作過程
1.先輸入圖片的名稱,不用加.bmp(ex: 輸入圖片的名稱: img1)
2. 用兩個for迴圈 ,將 rgb的數值分成三個numpy.array儲存。
3.三個 numpy.array 的單位大小是 uint8 ,也就是 1單位是1byte,而array的長度事先設為
image[0](長度)*image[1](寬度)。
4.準備另外三個矩陣 單位一樣為 uint8,來儲存 Run-length 壓縮的像素
5.runlength 壓縮後為:0 255 1 255 2 255 75 1 .....
(壓縮格式為:rgb數值+連續的數量+rgb數值+連續的數量…)6.如果連續的rgb數值大於255 則暫時存到 255 再繼續接著儲存。
(EX:0 255 0 255 0 255 0 255 …)
7. 因為run-length 壓縮的array事先的大小是圖片的pixel大小,但轉為run-length的資料後不需要那麼大,所以把原本的array的大小換成 run-length 資料的長度, 可以有效縮小檔案大小。
8.接著把r g b 分別對應的三個array,轉為binary檔存起來。
儲存的名稱為 (img_name+'_compress.bin')
寫入的時候會先寫入 2個 int 值,分別為圖片的長度跟寬度,以方便還原
而 rgb 三個Run-length array 的長度(3個int)也會寫入
9. RLE 解壓縮時 用 np.zeros((row,col,3),dtype='uint8') 來當作圖片接收 rgb的框架 ,當資料還原 完成 圖片也還原了
10.最後用 cv.imwrite("result_"+ img_name +".bmp",img_n) 將還原結果輸出
4.結果顯示
1.原始圖片 img1
沒有留言:
張貼留言