1. 作業說明:
附件中為三張利用將晶片高度以色彩視覺化後的圖片。
請設計一個基於Run-Length的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。
部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率。
2. 開發環境:
- Windows 10
- PyCharm 2019
- OpenCV 4.5.5
- Python 3.7
3. 實作方法:
Encoding:
1.用cv2.imread()讀取圖片
2.用cv2.split()切分成b,g,r通道
3.利用flatten() 將 b,g,r 轉成一維陣列
4.利用Run-Length編碼:
計算連續出現的值,依序以[value , quantity]的方式存入list
ex:
[1,1,2,2,2,3,3,3,3]=>[1,2,2,3,3,4]
5.分別將b,g,r的list串接起來且前五項存入長、寬、bgr list的長度
6.輸出list成img_compress.dat檔
Decoding:
1.讀取壓縮檔(.dat)
2.將b,g,r資訊分別存入list
3.利用Run-Length的方式解碼,value*quantity
ex: [1,2,2,3,3,4]=>[1,1,2,2,2,3,3,3,3]
4.np.array()將list轉成array並改為"uint8"
5.用reshape()將array轉成(長,
寬, channel)
6.用cv2.merge()將b,g,r合併成img
7.輸出圖片
4. 實作結果:
8/14.7 * 100% = 54% (img1.bmp)
10/14.7 * 100% = 68% (img2.bmp)
7.5/14.7 * 100% = 51% (img3.bmp)
img3.bmp原圖,壓縮檔,還原檔
沒有留言:
張貼留言