2021年6月5日 星期六

s1061448 影像處理作業6

         一、作業題目: 

        請設計一個基於Run-Length的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案

        二、開發環境: 

    作業系統:Windows 10 
    ide:pycharm,anaconda 4.4.0
    圖像處理:open-cv 4.4.0
    語言:python 3.6

        三、操作方法:


    压缩:
  1. 將圖像文件img.bmp和程式碼compress.py處在同一文件目錄下 
  2. 運行compress.py等待程式輸出跑完以後,會在該目錄下生成compress.1061448
    解压缩:
  1. 將壓縮後文件compress.1061448和程式碼decompress.py處在同一文件目錄下 
  2. 運行decompress.py等待程式輸出跑完以後,會在該目錄下生成decompress.bmp

        四、實現方法:


    压缩:
  1. 讀入img.bmp
  2. 將此圖像每一個行、列和RGB channel首尾相接視為一個一維整列
  3. 從第一個值到最後一個,記錄所有像素值連續出現的次數,整理並表示為[壓縮後陣列長度, 原圖像長, 原圖像寬, 原圖像channel數, 像素值1, 重複次數1, 像素值2, 重複次數2...]的格式。
  4. 以bw形式寫入compress.1061448中
    解压缩:
  1. 讀入compress.1061448 
  2. 提取長寬和像素值訊息
  3. 新建一個空的np陣列,並將像素值寫入
  4. 將該np陣列保存為decompress.bmp

五、最終效果:

     

   1. 壓縮前:

    解壓縮後:

    壓縮前後對比:


    2. 壓縮前:

  解壓縮後:
    
    壓縮前後對比:


    3. 壓縮前:

    解壓縮後

    壓縮前後對比:


    平均壓縮率為:
            
        100% * (8336/14322+13091/14322+7963/14322)/3 = 68.4%


沒有留言:

張貼留言