s1081540 作業 6

主題:Run-Length Based Image Compression 練習

作業說明

附件中為三張利用將晶片高度以色彩視覺化後的圖片。
請設計一個基於 Run-Length 的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。
部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率(compression ratio)。

開發環境

  • Windows 10
  • OpenCV 4.2.0
  • Visual Studio 2019
  • C++

程式實作

  • 使用 imread() 讀入附件中的圖像,再使用 empty() 判斷圖片是否存在,若圖像讀取失敗會輸出錯誤訊息並結束程式。
  •  split() :將彩色圖像拆分為3個單一通道(B、G、R)。
  • 分別對3個單一通道(B、G、R)進行Run-Length編碼壓縮。
    • Run-Length Encoding:將連續重複的資料改以兩個部份來表示,第一個byte代表顏色(0~255),第二個byte代表該顏色連續出現的次數。
  • 將壓縮後的資料寫入txt文字檔。
    • txt文字檔的內容包含:影像的列數、影像的行數、B通道的壓縮資料、G通道的壓縮資料、R通道的壓縮資料。
  •  imshow() :顯示原圖及經過膚色檢測後的圖像。
  • 計算壓縮率。
    • 資料壓縮比 = 壓縮前的資料量大小 / 壓縮後的資料量大小。
  • 輸出影像的列數、影像的行數、原來的檔案大小、壓縮後的檔案大小、壓縮率。
  •  waitKey(0) :透過使用者輸入0來中止程式。

執行結果

  • img1
    ▲ img1圖像及原始檔案大小

    ▲ 將img1壓縮後的文字檔部分內容及壓縮後的檔案大小

    ▲ 輸出結果

  • img2
    ▲ img2圖像及原始檔案大小

    ▲ 將img2壓縮後的文字檔部分內容及壓縮後的檔案大小

    ▲ 輸出結果

  • img3
    ▲ img3圖像及原始檔案大小

    ▲ 將img3壓縮後的文字檔部分內容及壓縮後的檔案大小

    ▲ 輸出結果

  • 壓縮率
    • img1壓縮率 = 2.070107752429847
    • img2壓縮率 = 1.213333514247755
    • img3壓縮率 = 2.239885522678505
    • 平均壓縮率 = ( 2.070107752429847 + 1.213333514247755 + 2.239885522678505 ) / 3                                                             = 5.523326789356107 / 3                                                                                                                                                       = 1.841108929785369
▲ 程式執行過程

參考資料


留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1091537 Homework #1