1091442 homework#5
學號: 1091442 姓名:李衍一 主題 : Run-Length Based Image Compression 影像壓縮練習 設計思路: 本次作業參考了 Tita’s Blog 的 影像處理小白(六): Run-Length Encoding 壓縮圖片 這篇文章中的做法,將連續數值的像素其值與連續數量組成字串,並寫入 .dat 檔內。讀取 dat 檔時再按照讀取到的數值與連續數量依次回填,即可完整復原圖像。 程式解析: 設置視窗名稱、壓縮檔名稱與平均壓縮率。 ratio_calculate 函式會取得原圖檔和壓縮檔的檔案大小,通過相除計算出單張圖片的壓縮率。 Img_compressed 函式的目的是壓縮檔案。首先讀入圖片,將圖片的長與寬以 write() 函式寫入檔案。 若直接檢查 RGB 整體的值是否重複,可能因某部分值不同而將其分開儲存。大幅減少壓縮效率。在這裡可以將圖片的 R 、 G 、 B 通道分開,一個一個計算重複。對於每個像素檢查與前一個像素是否相同,若相同則累積像素計數增加、不同則將當前像素值及累積像素計數寫入文件,重新設置像素檢驗點重新計數。 在全部檢查完後將剩餘像素也一併寫入,回傳檔案。 接著是將 dat 檔復原成圖片的 unsealed 函式。從文件讀入圖片長寬後建立三個通道的陣列。 分別對三個通道復原。在每個通道內兩個兩個值讀取,把像素值放入累積像素數量的座標內,復原出 R 、 G 、 B 三個通道的圖。 將 RGB 通道合併,即可得到完整復原圖。復原圖片回傳至主程式。 此為主程式部分。將圖片壓縮、壓縮率計算、解壓縮分別對三張圖片實作,再將壓縮率相加除以圖片張數即可得到平均壓縮率。 成果展示: 平均壓縮率: 1.612717797...