1091442 homework#5

學號:1091442                           姓名:李衍一

 

主題Run-Length Based Image Compression 影像壓縮練習 

 

設計思路:

本次作業參考了Tita’s Blog影像處理小白(六):Run-Length Encoding 壓縮圖片這篇文章中的做法,將連續數值的像素其值與連續數量組成字串,並寫入.dat檔內。讀取dat檔時再按照讀取到的數值與連續數量依次回填,即可完整復原圖像。

 

程式解析:

設置視窗名稱、壓縮檔名稱與平均壓縮率。

ratio_calculate函式會取得原圖檔和壓縮檔的檔案大小,通過相除計算出單張圖片的壓縮率。

Img_compressed函式的目的是壓縮檔案。首先讀入圖片,將圖片的長與寬以write()函式寫入檔案。

若直接檢查RGB整體的值是否重複,可能因某部分值不同而將其分開儲存。大幅減少壓縮效率。在這裡可以將圖片的RGB通道分開,一個一個計算重複。對於每個像素檢查與前一個像素是否相同,若相同則累積像素計數增加、不同則將當前像素值及累積像素計數寫入文件,重新設置像素檢驗點重新計數。

在全部檢查完後將剩餘像素也一併寫入,回傳檔案。

接著是將dat檔復原成圖片的unsealed函式。從文件讀入圖片長寬後建立三個通道的陣列。

分別對三個通道復原。在每個通道內兩個兩個值讀取,把像素值放入累積像素數量的座標內,復原出RGB三個通道的圖。

RGB通道合併,即可得到完整復原圖。復原圖片回傳至主程式。

此為主程式部分。將圖片壓縮、壓縮率計算、解壓縮分別對三張圖片實作,再將壓縮率相加除以圖片張數即可得到平均壓縮率。

 

成果展示:


平均壓縮率:1.6127177979475829

 

成果反省:

直到這次作業查找資料時,才發現原來有位前輩對這次課程的作業做了詳細解析,之前都沒注意到……這次的作業基本上是照搬他的設計思路來實現。在鑽研過程式碼之後,我發現他的做法很漂亮,以我的能力很難再去作改進了,於是決定延用他的做法。有更漂亮的做法為什麼不用呢?

我從他身上學到的另外一點,是對程式的解析。我在網路上看到的大部分程式都是整段丟上來給人自己trace,我也常採取這種做法。因此在看到作業二的評語「程式碼解釋不完整」時,我完全摸不著頭緒。直到看到他把每段程式碼分別標記出來並仔細講解,我才終於理解該如何解析自己的程式碼。我現在知道那句話是什麼意思了。

這次多虧了這位前輩,我理解了自己的不足,改變了程式解析的做法,讓解釋更加詳盡。 

留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1061637 作業6