2022年6月2日 星期四

1081535 作業6

     

一、 作業說明 

  • 基於Run-Length的壓縮,對圖檔作無失真壓縮後儲存成新檔案

 作業環境

  • MacOS Monterey 12.2
  • PyCharm 2019.3.3
  • Python 3.8
  • OpenCV 4.5.5

 實作功能與方法

  • Encode
    • 基於Run-Length的壓縮,對圖檔作無失真壓縮後儲存成新檔案

    • 使用cv2.imread()讀取圖片並利用cv2.split()將圖像分成B, G, R三個二維陣列

    • 使用flatten()將二維轉成一維

    • 分別進行RLE編碼存入npz檔案中

      1. 將原始[0, 0, 0, 255,255,255]編碼成[3, 3]與[0, 255]分別代表連續個數與像素之值
      2. 三通道編碼之值append()使用np.savez("image",compress_array)得到壓縮檔
    • 利用原始圖檔數據長度與壓縮後編碼長度,計算圖片的壓縮率及平均壓縮率

  • Decode
    • 使用file.open()file.read()讀取壓縮檔(.npz)

    • 進行RLE解碼,將相對應之值放入一維陣列,得到R, G, B通道解碼

    • 分別使用reshape(一維陣列, (w, h))將各通道資料轉成二維

    • 使用np.dstack()B, G, R通道合併,得到無失真壓縮解碼圖(.bmp)

四、 執行結果

img1(原圖VS壓縮並解碼後圖像)



img1(原圖VS壓縮並解碼後圖像)



img3(原圖VS壓縮並解碼後圖像)



平均壓縮率:8.786012692178309%





沒有留言:

張貼留言