2021年6月3日 星期四

s1063514影像處理作業6

影像處理概論作業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

                                                                img1.bmp


img1.bmp_compress.bmp(reconstruct)

img2.bmp

壓縮耗時:500.0s 解壓縮耗時:19.5s        compression ratio(14322/3544)=>4.04119


                                                        img2.bmp
     
 
                                  img2.bmp_compress.bmp(reconstruct)

img3.bmp        

壓縮耗時:160.5s 解壓縮耗時:18.6s        compression ratio(14322/2056)=>6.96595

                                                        img3.bmp
           
img3.bmp_compress.bmp(reconstruct)




                                          


                








沒有留言:

張貼留言