2022年5月30日 星期一

s1081516 作業6

 作業說明:

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

開發環境:

    Windows 11
    Anaconda 4.10.3
    Python 3.9.7
    numpy 1.20.3
    opencv-python 4.5.5.62

程式說明:

encode.py

1.     讀入圖片分割成RGB 三個Chanel

2.     將分割後的Chanel變成一維,做Run-Length 壓縮,每組資料的儲存格式 => (值,長度)

        type = np.uint8,如果長度 > 255,用多組資料儲存

3.     將壓縮後的資料(包含r,g,b三個chanel壓縮後的值以及原圖片的長寬(h,w))儲存成另一個檔案(.npz)

4.     輸出原圖片(.bmp)、壓縮後(.npz)的檔案大小以及壓縮率

  • 若還有圖片要壓縮,重新執行步驟1~4

5.     輸出平均壓縮率

decode.py

1.       讀入壓縮檔(.npz)

2.       r,g,b三個chanel各自解壓縮

3.       2.的結果reshape(h,w)

4.       3的結果merge成圖片,並用astype(np.uint8)設定圖片格式

5.       產生透過壓縮檔產生的圖片(.bmp)

執行結果:

原圖、壓縮檔、還原後的圖片









2022年5月29日 星期日

s1083336 作業6

 作業說明:

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


開發環境:

  •     Windows10
  •     VSCode
  •     python 3.10.2
  •     OpenCV 4.5.5

實作說明:
    將讀入的圖片的channel切開來,提高壓縮效率
    B, G, R = cv2.split(img)

    依序將每個channel代入function,計算出美行的結果,並寫入檔案和計算花費
    def dealOneChannel(channel):
        for row in channel:
            result = oneRow(row)
            cost[0] += len(result)
            temp = ""
            for digit in result:
                temp = temp + str(digit) + ", "
            file.write(temp + '\n')
        file.write("\n")

    

    結果參考,一列對應到圖片的一個row的資料,但它會自動換行也不是很好看,每個channel會以一列完全空白的資料分別

壓縮的比例:
    

s1083344 作業6

 上圖示我程式的大略結構,原理就是按照顏色計數。但如果只是單純按照顏色計數,在圖2這種顏色比較豐富的圖像就會讓壓縮率很差,所以除此之外,將顏色進行統計後編碼會得到更好的壓縮率(但程式會跑很久)


輸出後的txt檔結構大致如下,會包含圖片的size,圖片顏色編碼的資訊。


這邊則是依照編碼結果計數後的結果











有了這些資訊,我們只要將編碼的結果對照回顏色,然後一個一個輸回Mat即可得到還原的結果。


以上是還原的結果。
以下是壓縮率的表現:


 

2022年5月27日 星期五

s1073523 作業6

 

一、開發環境

  • Window 10
  • Visual studio code 1.42.1
  • OpenCV 4.4.0
  • Python 3.6.8

二、作業說明

    請設計一個基於Run-Length的壓縮方法,對圖檔作無失真壓縮後儲存成新檔案。
    部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率。


三、實作方法 

  1. 將讀入的圖片的RGB通道分割。
  2. 把3通道變成一維,做rle壓縮,並將壓縮後的值與長寬儲存。
  3. 把壓縮檔解壓,利用裡面的值還原圖片,注意圖片要是np.uint8
  4. 用原圖大小與壓縮大小去計算壓縮率。

四、實作圖片

img1.bmp還原圖
img2.bmp還原圖
img3.bmp還原圖
壓縮率與平均壓縮率
壓縮檔







2022年5月26日 星期四

s1083332 作業6

一、 作業說明

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

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

二、 開發環境

Windows 10

Python 3.9.7

OpenCV - 4.5.5

三、 實作方法

        1. 讀入圖片,並利用split(),分成r, g, b channel

        2. 將各個channel降成一維

        3. 利用Run-Length方法,得到最新壓縮後的資料(img_color, data_color)

        4. 利用原資料與最新資料計算每張圖的壓縮率及平均壓縮率

        5. 將壓縮後的資料解壓縮,得到原圖 (無失真)

四、 執行結果

    

compression ratio

output_img1.bmp

output_img2.bmp
      

output_img3.bmp

2022年5月25日 星期三

s1061551 作業6

作業說明:

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

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


環境:

python 3.8

windows 10

opencv 4.5.5


實作過程:


因此,我先算出一共有多少種顏色,並將顏色的ID和RGB值對應,
Bin檔的部分將圖片的高低存入,然後是一共有多少種顏色,每個顏色的ID和RGB值互相呼應。
EX:存入4個數字16 255 0 34,將他理解成RGB值255 0 34對應的編號都是16。
之後再比照附圖的每一列的run length值。

實作結果
















2022年5月23日 星期一

s1083312 作業 6

 

  •  作業題目:
    • 附件中為三張利用將高度以色彩視覺化後的圖片。
      請設計一個基於Run-Length的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。
      部落格上應敘述你的壓縮方法,提供壓縮檔之格式,並計算三張圖的平均壓縮率(compression ratio)。
  •  使用環境:
    • window 10
    • python 3.9.2
  • 程式功能:
    •  讀取bmp檔案再imwrite到一個資料夾存取壓縮的照片
    • 使用get_filesize、sizeConvert來進行讀取照片的檔案大小
    • 進行相加運算以及除法運算即可算出平均壓縮率
  • 執行結果: