2022年5月30日 星期一

s1073328 作業6

     

    1. 作業說明:


    • Run-length Based Image Compression練習

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


    2. 開發環境:


    • Windows 10

    • Visual Studio 2017

    • OpenCV 4.5.5


    3. 程式流程:


  • 首先,根據提示,輸入要執行的程式。


                    👉 總共有三種選擇

                            (1)壓縮彩色檔案,並生成.encode的壓縮檔案

                            (2)將.encode檔案進行解壓縮,以還原圖檔

                            (3)計算檔案壓縮率(compression ratio)
                        

  • (1)壓縮圖檔
    • 輸入.bmp檔案的路徑。                                     
    • 宣告一個struct來儲存需要的數值,包括檔案的路徑,圖片的長和寬,使用的顏色,以及RLE結果等等。




    • 藉由Run-length方法,撰寫自訂義的函數Image_RLE(),進行壓縮計算。




    • 將剛剛經由RLE壓縮後的結果儲存成新檔案,並令其副檔名為.encode。




    • 最後,在視窗顯示檔案所儲存路徑以及壓縮成功的提示。




    • 壓縮過後的.encode檔案內容格式如下:





  • (2)解壓縮
    • 輸入.encode檔案的路徑。


    • 根據壓縮檔案的內容,撰寫一個自訂義的解壓縮方法,將這些讀到的數據解壓縮回原本的圖檔,並秀出結果。


img1.encode解壓縮後結果



img2.encode解壓縮後結果



img3.encode解壓縮後結果



  • (3)計算壓縮率
    • 利用seekg()以及tellg()這兩個指令獲取img1、img2、img3各自的.bmp與.encode的檔案大小,然後計算出各圖檔的壓縮率,以及平均壓縮率,並將結果顯示在視窗。

計算壓縮率的函數


壓縮率計算結果

                            
                             ❗  平均壓縮率: 1.82692  ❗



    4. 原圖檔及壓縮檔比較:



    原始圖檔(.bmp)&壓縮後檔案(.encode)



    img1原檔與壓縮檔比較



    img2原檔與壓縮檔比較


    👉img2的圖片色彩較繽紛且多變化,因此整體壓縮效果沒其他兩個好。
    因為必須存更多顏色資訊,而造成檔案大小還是很大。
    不過壓縮率仍有大於1,還是有達到壓縮效果。


    img3原檔與壓縮檔比較



沒有留言:

張貼留言