s1093338 Homework #5
1122 Digital Image Processing Assignment #5
學號:1093338 姓名:簡毓臻
主題: Run-Length Based Image Compression 影像壓縮練習
專案目標:
撰寫一個程式來基於Run-Length的
壓縮方法,對圖檔作無失真壓縮後儲存成新檔案,並計算三張圖的平均壓縮率(compression
ratio)。
開發環境:
- 用的作業系統:Windows
- 開發環境:VScode
- 用的套件:numpy, PIL
- 程式語言:Python 3.12.0
程式架構與功能說明:- 讀入要壓縮的檔案及檔案大小
- 將原始圖片分成 R、G、B三個通道,並加起三個通道的 size 以獲得原始圖片的 size
- 壓縮方法:使用 Run-Length Encoding (RLE),是將連續出現的相同數據值替換為一個數據值和其出現的次數
- channel.flatten() 將通道中的像素數據變成為一維數組
- 遍歷像素數據中的每個像素,從第二個像素開始(因為第一個像素已經作為 prev_pixel 處理過了)
- 如果當前像素與前一個像素相同,則增加計數器 count,直到最後一個像素
- 儲存通道的 value 及 count,並將其寫成 bin 檔
- 計算三個通道各自的 size ,並加起三個通道的 size 以獲得壓縮後的圖片的 size
- 計算壓縮率
- 將三個通道 merge 成一張圖片(decode)
- 計算三張圖片的壓縮率
成果展示與討論: 壓縮後圖片無失真。- img1.bmp 及壓縮後再解壓縮圖片
- 讀入要壓縮的檔案及檔案大小
- 將原始圖片分成 R、G、B三個通道,並加起三個通道的 size 以獲得原始圖片的 size
- 壓縮方法:使用 Run-Length Encoding (RLE),是將連續出現的相同數據值替換為一個數據值和其出現的次數
- channel.flatten() 將通道中的像素數據變成為一維數組
- 遍歷像素數據中的每個像素,從第二個像素開始(因為第一個像素已經作為 prev_pixel 處理過了)
- 如果當前像素與前一個像素相同,則增加計數器 count,直到最後一個像素
- 儲存通道的 value 及 count,並將其寫成 bin 檔
- 計算三個通道各自的 size ,並加起三個通道的 size 以獲得壓縮後的圖片的 size
- 計算壓縮率
- 將三個通道 merge 成一張圖片(decode)
- 計算三張圖片的壓縮率
- img1.bmp 及壓縮後再解壓縮圖片
留言
張貼留言