一、作業說明
2022年5月31日 星期二
s1083335 作業6
一、作業說明
二、開發環境
三、實作方式
四、執行結果
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
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.輸出計算結果
2022年5月30日 星期一
s1073328 作業6
1. 作業說明:
- Run-length Based Image Compression練習
2. 開發環境:
- Windows 10
- Visual Studio 2017
- OpenCV 4.5.5
3. 程式流程:
- 首先,根據提示,輸入要執行的程式。
- (1)壓縮圖檔
- 輸入.bmp檔案的路徑。
- 宣告一個struct來儲存需要的數值,包括檔案的路徑,圖片的長和寬,使用的顏色,以及RLE結果等等。
- 藉由Run-length方法,撰寫自訂義的函數Image_RLE(),進行壓縮計算。
- 將剛剛經由RLE壓縮後的結果儲存成新檔案,並令其副檔名為.encode。
- 最後,在視窗顯示檔案所儲存路徑以及壓縮成功的提示。
- 壓縮過後的.encode檔案內容格式如下:
img1.encode解壓縮後結果 |
img2.encode解壓縮後結果 |
img3.encode解壓縮後結果 |
- (3)計算壓縮率
- 利用seekg()以及tellg()這兩個指令獲取img1、img2、img3各自的.bmp與.encode的檔案大小,然後計算出各圖檔的壓縮率,以及平均壓縮率,並將結果顯示在視窗。
4. 原圖檔及壓縮檔比較:
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陣列,
3. 判斷為需做解壓縮unzip1(): 將文字檔內的數值儲存在unzip陣列,
用兩個for迴圈並將RGB分開處理需解壓縮目標檔案,
num = unzip[n3],color = unzip[n3 + 1],
統計數量n4,如果小於num,則該圖片位置元素數值為color,否則將資料更新,
元素數值為新的color,並重新統計數量n4,
解壓縮結束將輸出BMP檔(unzip_compression_img1.bmp),
計算結束輸出還原圖片路徑和還原圖(Unzip)。
執行結果:
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,r的list串接起來且前五項存入長、寬、bgr list的長度
6.輸出list成img_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. 實作結果:
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的壓縮法方,對圖檔作無失真壓縮後儲存成新檔案。
二、開發環境
Windows 10
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