2022年5月31日 星期二

s1071608 作業6

  一、作業說明

    請設計一個基於Run-Length的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。
    並計算三張圖的平均壓縮率(compression ratio)。

二、開發環境

    Windows 10
    Python 3.9.7
    OpenCV 4.5.5

三、實作方法
    1.讀取圖片,讀取長寬、各pixel值
    2.將BGR切分,並壓縮成一維陣列,進行RLE。
    3.處理完的結果存成壓縮檔
    4.計算各壓縮率及壓縮平均率

四、執行結果
    










s1083335 作業6

 一、作業說明

    請設計一個基於Run-Length的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。
    並計算三張圖的平均壓縮率(compression ratio)。

二、開發環境

    Windows 10
    Python 3.9.7
    OpenCV 4.5.5

三、實作方式

    1. 用imread讀入三張圖片
    2. 用split將圖像分成BGR三個通道
    3. 使用flatten將BGR轉成一維陣列
    4. 分別計算三個通道run length
    5. 將結果存入檔案並計算壓縮率

四、執行結果

img1

img2

img3

result

s1083306 作業6

  1. 作業說明

附件中為三張利用將晶片高度以色彩視覺化後的圖片。

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

部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率(compression ratio)

2.開發環境

Windows 10

Visual Studio 2019

OpenCV 455

3. 實作方法

1. 讀入圖片後,將圖片用split切割為R,G,B三個通道

2. 再用flatten將各通道一維化

3. 接著對每個通道做RLE壓縮,如1,1,2,2,3,3,3,就會壓縮成2,1,2,2,3,3

4. 把處理完的結果儲存成壓縮檔

5. 計算平均壓縮率

4. 執行結果

img1


img2


img3


壓縮率















s1081543 作業6

 作業說明:

  • 請設計一個基於Run-Length的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案,並計算三張圖的平均壓縮率

開發環境:

  •       Window10   
  •       Microsoft Visual Studio 2019
  •       C++
  •       OpenCv 4.5.5

程式說明:

    Encode:

        1.將讀入的圖片使用split()把三個channel分離並

           存入vector中

        2.接下來將分離出的三個cahnnel從二維降成一

           維,也將其分別存入不同vector

        3.對每個一維的陣列個別做Run-length encoding

                ex:11122333 ----> 3,1,2,2,3,3

        4.最後將其輸出到同一個.dat檔中,每一個 

           channel的資訊分別用"end"做區隔

    Decode:

        1.將壓縮後的.dat檔讀入

        2.將每個channel的資訊個別存取

        3.Mat一張新的圖片並將讀取的資訊依序填入每個

           pixel得到無失真的圖像

    計算壓縮率:

        1.使用stat()來取的檔案的資訊

        2.計算 壓縮率 = 原圖大小/壓縮檔大小

        3.輸出計算結果

               

執行結果:

       解壓縮之結果

(因圖片太大張有使用resize()調整輸出大小)






壓縮率



檔案資訊


.dat檔內容





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原檔與壓縮檔比較



s1083346 作業6

Run-Length Based Image Compression練習


附件中為三張利用將晶片高度以色彩視覺化後的圖片。

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

部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率(compression ratio)。


開發環境:

Windows10

Vscode

Python3.9.6

Opencv-Python_4.5.5.62


程式想法:

一開始讀入圖片後,先將圖片B,G,R值用split()分開,再來使用flatten()將各通道變成一維陣列

接著針對每一個通道進行RLE壓縮,舉例:如果資料是1,1,1,2,2,3

那就將他變成3,1,2,2,1,3

壓縮完之後,將圖片的長 寬 RGB的長度 還有RGB的值存入npz檔案中

再來用getsize()取得圖片大小,然後得到圖片壓縮率和平均壓縮率


成果:



Demo影片:https://youtu.be/pPuPsDEsNw8





s1081541 作業6

 

作業說明:

程式功能:附件中為三張利用將晶片高度以色彩視覺化後的圖片。

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

計算三張圖片的平均壓縮率(compression ratio)。


開發環境: 


Windows 10 + Visual Studio 2019 + OpenCV 4.5.0 + C++


實作方法:

1. 輸入檔案名稱,判斷該檔案需壓縮還是解壓縮,讀取檔案。

2. 判斷為需做壓縮compression1(): 用兩個for迴圈並將RGB分開處理需壓縮目標圖片,

n1 = img.at<Vec3b>(i, j)[rgb],

n2 = img.at<Vec3b>(i, j - 1)[rgb],

計算同顏色的連續長度,儲存數值(Color Index, Number of Pixels)在compression陣列,


        
        將compression陣列輸出到文字檔(compression_img1.bmp.txt),

        計算結束輸出”done”和原圖(Original)。



3. 判斷為需做解壓縮unzip1(): 將文字檔內的數值儲存在unzip陣列,

用兩個for迴圈並將RGB分開處理需解壓縮目標檔案,

num = unzip[n3],color = unzip[n3 + 1],

統計數量n4,如果小於num,則該圖片位置元素數值為color,否則將資料更新,

元素數值為新的color,並重新統計數量n4,

解壓縮結束將輸出BMP檔(unzip_compression_img1.bmp),

計算結束輸出還原圖片路徑和還原圖(Unzip)。



執行結果:

由下圖可知檔案資料量,
每一張圖片(img*.bmp)壓縮成文字檔(compression_img*.bmp.txt)後資料量變少,
再解壓縮還原成圖片(unzip_compression_img*.bmp)後與原始圖片的內容與大小一樣,
壓縮率=原始大小/壓縮大小,如統計圖表所示此作業的平均壓縮率為2.1865。        * = 1, 2, 3





s1073308 作業6

1. 作業說明:

附件中為三張利用將晶片高度以色彩視覺化後的圖片。

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

部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率

2. 開發環境:

    • Windows 10
    • PyCharm 2019
    • OpenCV 4.5.5
    • Python 3.7

3. 實作方法:

               

    Encoding:

        1.cv2.imread()讀取圖片

        2.cv2.split()切分成b,g,r通道  

        3.利flatten() 將 b,g,r 轉成一維陣列

        4.利用Run-Length編碼:

              計算連續出現的值,依序以[value , quantity]的方式存入list

              ex: [1,1,2,2,2,3,3,3,3]=>[1,2,2,3,3,4]

        5.分別將b,g,rlist串接起來且前五項存入長、寬、bgr list的長度

        6.輸出listimg_compress.dat

    Decoding:

        1.讀取壓縮檔(.dat)

        2.b,g,r資訊分別存入list

        3.利用Run-Length的方式解碼,value*quantity

             ex: [1,2,2,3,3,4]=>[1,1,2,2,2,3,3,3,3]

        4.np.array()list轉成array並改為"uint8"

        5.reshape()array轉成(長, 寬, channel)

        6.cv2.merge()b,g,r合併成img

        7.輸出圖片

4. 實作結果:


        8/14.7 * 100% = 54% (img1.bmp)
        10/14.7 * 100% = 68% (img2.bmp)
        7.5/14.7 * 100% = 51% (img3.bmp)

                                                          img1.bmp原圖,壓縮檔,還原檔


                                                          
                                                          img2.bmp原圖,壓縮檔,還原檔


  img3.bmp原圖,壓縮檔,還原檔

s1083309 作業6

 1.作業說明

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

 部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率

2.開發環境

windows10

Visual Studio 2022

OpenCV4.5.5

3.實作方法

1.使用imread讀取圖片

2.將圖片以Run Length encoding的方式將檔案壓縮,壓縮方法為將(1,1,1,1,5,5,2,2,2)壓縮為(4,1,2,5,3,2)

3.將處理完結果儲存成壓縮檔

4.計算平均壓縮率

4、執行結果


壓縮檔案型式


壓縮率結果


壓縮的演算法


s1080741作業6

 

一、作業說明

附件中為三張利用將晶片高度以色彩視覺化後的圖片。

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

部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率(compression ratio)


 二、開發環境

Windows 10

Anaconda 4.10.3 + Visual Studio Code

OpenCv 4.5.5


 三、實作方法

1. cv.imread讀取照片之後,將圖片的b, g, r三個channel都分割出來做Run Length          Encoding,Run Length Encoding,假如照片第一Row

    (0,1,1,1,1,1,3)那就編碼成(1,0,5,1,1,3)。

2. 將b, g, r都編碼完畢之後依序寫入.txt檔案,這裡RLE編碼採用np.array

    且dtype = np.uint8,因為0~255用8bit unsign表示

3. 最後decode就按照RLE的方式還原b, g, r三個channel的資料,再merge成一張圖片

    output 。

 四、執行結果

比較compressed ratio

img1-decode

img2-decode
img3-decode