2021年6月4日 星期五

s1071545 影像處理作業 6

 作業說明:

    附件中為三張利用將高度以色彩視覺化後的圖片。請設計一個基於Run-Length的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。

開發環境:

    Window 10

    Anaconda

    VScode

    Python

運行說明:

    先利用f.seek(14),因為bmp的前14格資料我們用不到,再來利用f.read(40)將標頭資訊擷取出來,再來用while將剩下的資料利用f.read(3)讀出並依據RGB存入對應的list中,讀完後利用np.array(list)將list轉換為numpy array並使用cv2.flip進行圖片的上下左右反轉。接下來使用RLE的方法先對每一列中的元素進行壓縮,再將重複的列進行合併,之後輸出成dat檔,格式為

    header:  圖片長、寬

    data: R : 列重複次數、[[顏色編碼、出現次數]、[顏色編碼、出現次數]......]

             G : 列重複次數、[[顏色編碼、出現次數]、[顏色編碼、出現次數]......]

             B : 列重複次數、[[顏色編碼、出現次數]、[顏色編碼、出現次數]......]

    之後再將剛剛輸出的dat檔重新讀入,並且利用長寬資訊進行解壓縮,將還原出的檔案儲存起來。

** 假設檔案名稱為 img1.bmp,則壓縮完的檔案名稱將為img1_ecoding_output.dat,再次解壓縮的圖片檔案名稱為img1_decoding_output.bmp

平均壓縮 : (4.5713373763166294286626236833706 + 2.741916969581021618519227090109 + 4.7789263087695898632877625875292) / 3 = 4.0307268848890803034898711203363

結果畫面:

img1.bmp

(壓縮率: 14322/3133 = 4.5713373763166294286626236833706)

img2.bmp

(壓縮率: 14322/5227 = 2.741916969581021618519227090109)

img3.bmp

(壓縮率: 14322/2999 = 4.7789263087695898632877625875292)

沒有留言:

張貼留言