顯示具有 109hw6 標籤的文章。 顯示所有文章
顯示具有 109hw6 標籤的文章。 顯示所有文章

2021年6月6日 星期日

s1071527 影像處理作業6

1. 作業說明:  

Run-Length Based Image Compression練習

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

2. 作業環境、語言:

Windows 10 + PyCharm Community Edition 2020.3 x64 + OpenCV4.5.1, python 3.8

 

3. 方法:

        A. 壓縮:

         (1) 讀取圖片,取得圖片大小&BGR三個channel值(split)

         (2) 調整陣列(2D  to 1D)

         (2) 將BGR三個channel值分別做RLE演算法壓縮

         (3) 壓縮完的BGR寫入.npz檔

        B. 解壓縮

         (4) 讀取.npz檔、取得三個被壓縮的BGR值

         (5) 用逆向的RLE還原本來的BGR值

         (6) 調整BGR陣列大小(reshape())

         (7) 合併三個channel後寫出圖片

 

4. 執行結果:

img1.bmp & img1_RLE.bmp(解壓縮後圖片)



Img2.bmp & img2_RLE.bmp(解壓縮後圖片)



Img3.bmp & img3_RLE.bmp(解壓縮後圖片)

壓縮率:

13.9/8.14 = 1.7076167076167



13.9/13.5 = 1.0296296296296



13.9/7.77 = 1.7889317889317



平均壓縮率 = (13.9/8.14 + 13.9/13.5 + 13.9/7.77)/3 = 1.5087260420593

s1073345 影像處理作業6

 

作業說明:

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


操作環境:

    Window10
    Visual Studio 2019
    Python3.8
    OpenCV 4.5.1


程式說明:

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

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


執行結果:

        壓縮率:


img1.bmp:7885/14322*100 = 55.05%


img2.bmp : 13467/14322*100 = 94.03% 


 img3.bmp : 7314/14322*100 = 51.07%








2021年6月4日 星期五

s1071523 影像處理作業6

作業說明:

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

開發環境:

  • Windows 10
  • Visual Studio Code
  • Python 3.8.5
  • OpenCV 4.4.0

實作:

  1. 將header資訊讀取出來
  2. 將所有pixel值存放在list中
  3. 讓每一pixel之RGB分別與前一pixel之RGB比較,用三個list儲存各pixel的RGB分布
  4. 分別用maxR、maxG、maxB儲存最大的數量
  5. bytesR、bytesG、bytesB算出至少需多少bytes儲存數字
  6. 存檔時,用.to_bytes(bytesR)將各顏色數量轉成對應的byte數儲存
  7. 壓縮檔案儲存為imgx_compress.bin

 執行結果:

圖一原圖

圖一解壓縮後結果圖

圖二原圖

圖二解壓縮後結果圖

圖三原圖

圖三解壓縮後結果圖


圖一壓縮率 : 14322 / 4168 = 3.436

圖二壓縮率 : 14322 / 5369 = 2.667

圖三壓縮率 : 14322 / 3982 = 3.596

平均壓縮率 : (3.436 + 2.667 + 3.596) / 3 = 3.233