影像處理概論作業6
作業題目:
Run-Length Based Image Compression練習
附件中為三張利用將高度以色彩視覺化後的圖片。
請設計一個基於Run-Length的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。
部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率(compression ratio)。
使用環境:
- Linux version 4.15.0
- Python 3.6.9
- opencv-python 4.5.1.48
- numpy 1.19.15
- struct
- time
實作方法:
1.壓縮
原本想用RLE 對 binary 做壓縮,但是考慮到這次針對圖片做壓縮,所以將其以每個pixel內的R,G,B三通道分別進行壓縮,在RLE壓縮下連續性高,才能做到有效壓縮,不分開會導致不連續的問題,這次寫的演算法分別計算單一通道上值有幾個重複與值為多少,並將他儲存起來,並且也將累計超出byte的空間,再做分割重新計算,大大減少儲存而需另外增加的overhead,也避免了圖片到了一定大小就無法壓縮的限制,為了能讓圖片正確還原,將圖片長寬資訊儲存在前頭做header,並將處理後的三通道壓在一起後接上,完成整個壓縮的動作
2.解壓縮
依照我壓縮時訂的規則做還原,並分別以byte為單位讀取資訊,將開頭長寬資訊讀取出來,透過numpy建立一張空圖根據所讀取到的長寬做為大小,並接續讀取圖片資訊,以opencv排列為主B,G,R分別依順序讀取,填進所建立的空白圖中,將圖片無損還原回來。
***注意 格式為我制定的特規,必須用此程式內的解壓縮才可還原
開關
compress =>True or false
decompress=>True or false
執行結果:
Avg_compression ratio>>>(6.63977+4.04119+6.96595)/3=5.88230
截圖>原圖>還原圖
img1.bmp
壓縮耗時:179.5s 解壓縮耗時:18.5s compression ratio(14322/2157)=>6.63977
沒有留言:
張貼留言