2021年6月6日 星期日

s1073311影像處理作業6

作業說明:

附件中為三張利用將高度以色彩視覺化後的圖片。請設計一個基於Run-Length的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。
部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率(compression ratio) 


操作環境:

macOS Big Sur
終端機
Python 3.7.3/openCV 4.5.1


程式說明:

Encoding:
    1.用cv2.imread()讀取圖片
    2.用cv2.split()切分成b,g,r通道  
    3.用flatten()將r,g,b轉成1D array
    4.利用Run-Length編碼:
          計算連續出現的值,依序以[ value , quantity]的方式存入list
          ex: [1,1,1,2,2]=>[1,3,2,2]
    5.分別將b,g,r的list串接起來且前五項存入長、寬、rgb list的長度
    6.輸出list成img_compress.dat檔

Decoding:
    1.opem()讀取.dat檔
    2.將b,g,r資訊分別存入list
    3.利用Run-Length的方式解碼,value*quantity
        ex: [1,3,2,2] => [1,1,1,2,2]
    4.np.array()將list轉成array並改為uint8
    5.用reshape()將array轉成(height, width, channel)
    6.用cv2.merge()將b,g,r合併成img
    7.用cv2.imwrite()輸出圖片


執行結果:

 壓縮率:    
                img1.bmp:5.9/14.7*100 = 40.13%
                img2.bmp : 10.2/14.7*100 = 69.39% 
                img3.bmp : 5.5/14.7*100 = 37.41%

            img1:

                                                                                    
                                                                                 


                                                       原圖                         解壓縮後的圖


                img2:
                    
            
                                                                                                                                                                 
                        

                                                       原圖                          解壓縮後的圖
              
              img3:

                                                                                                                                        

                                         
        

                                                  
原圖                              解壓縮後的圖

   
     

沒有留言:

張貼留言