2022年6月1日 星期三

s1081534 作業6

  1. 作業說明: 

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


2.開發環境:

  • Windows 10
  • Visual Studio 2019
  • OpenCV3.4.6
  • C++
3.實作方法:
  1. 將讀入的圖片使用split()把三個channel分離並存入vector

  2. 將分離出的三個cahnnel從二維降成一維,也將其分別存入不同vector

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

  4. 最後輸出到同一個dat檔中,將每一個 channel的資訊分別做區隔

  5. 第二部分將壓縮後的檔案在解壓縮

  6. 讀入dat檔,將每個channel個別存取 

  7. Mat一張新的圖片並讀取的資訊填入每個pixel得到無失真的影像

  8. 用resize()去調整輸出圖片的大小  

  9. 最後分別去計算壓縮率(原圖大小/壓縮檔大小)和平均壓縮率

4.執行結果:
輸出圖片:


檔案大小對照:
壓縮率:








s1083340 作業6

 

作業說明

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

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

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


開發環境

  • Windows 11
  • Pycharm 2021
  • Python3.7
  • Opencv-python 4.5.5.62
程式說明
  
Encoding:
  1.使用cv2.imread()讀取圖片
  2.使用cv2.split()將圖像分成b,g,r通道
  3.使flatten()將各個通道轉成一維
  4.接著針對每一個通道進行RLE編碼,並將原圖片的長、寬、壓所後資料存入npz檔案中
    ⭐其中把b,g,r資料串接起來
  5.利用原始圖檔大小與壓縮後圖檔資料,計算圖片的壓縮率及平均壓縮率

Decoding:
  1.讀取壓縮檔(.npz)
  2.b,g,r壓縮資料分別存放
  3.接著針對每一個通道進行RLE解碼
  4.使用np.array()將資料型態轉成array
  5.使reshape()將各通道資料轉成三維
  6.使cv2.merge()b,g,r合併,得到原圖(無失真)

執行結果
 img1.bmp原圖,壓縮檔,還原檔

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

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

圖片的壓縮率及平均壓縮率










s1083304作業6

 1. 作業說明

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

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

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

2.開發環境

Windows 10

Visual Studio Code 1.64

OpenCV 455

3. 實作方法

encode.py:

1. 讀入圖片後,用split()分離BGR通道,並使用flatten()將各通道一維化。

2. 自訂一個 RLEencode() 對各通道做壓縮,頭兩個資料存原圖長寬h,w,主要格式為(重複出現次數,數值),ex:[ 0 0 0 0 0 1 1 4 4 4 ] -> [ 5 0 2 1 3 4 ] ,各通道用 'b' , 'g' , 'r' 分離辨別。

3.最後計算出 compress ratio 和 average compress ratio 

decode.py:

1.open txt and read

2.照重複出現次數和數值復原BGR。

3.分別把BGR list 照原圖h,w reshape(),用 astype() 設定為 uint8

4.將三通道 merge() 起來,得到原圖。

4. 執行結果

                                                       壓縮檔格式

                                                                           頭

                           


                                                                           尾

                               

                                                           compression ratio

                                

img1 encode -> decode

img2 encode -> decode


img3 encode -> decode



s1071502 作業6

 一、 作業說明

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

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

 

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

二、 作業環境

Windows 10

 

OpenCV 4.5.5

 

Vscode + Python 3.10.4

 

三、 實作方法

1.讀取圖片,並檢查是否有錯誤。

2.將圖檔拆為RGB三個data並分別對其做RLE
3.
做完RLE後將其儲存成.tif形式的檔案。

4.使用getsize取得檔案大小並且計算壓縮率。

四、 執行結果


s1081542 作業6

 

作業說明:

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

使用環境/語言:

  • Windows10
  • Visual Studio 2019
  • Opencv-4.3.0
  • C++

實作方法:

  1. 主要有兩個檔案紀錄圖片的資訊:ColorDatabase.txtImageColor.txt
  2. 程式會將圖片出現過的顏色記錄起來,而且每種顏色都會對應到一組ID,並將這些資訊存進ColorDatabase.txt
  3. 程式會紀錄圖片中的不同顏色出現的狀況,並將值存到ImageColor.txt
  4. 舉例:假設圖片第一列的pixes分別是:白白黑紅,由於在ColorDatabase.txt中,白色是代表0號,黑色代表1號,紅色代表2號,因此在ImageColor.txt中紀錄的格式會是:0:2 1:1 2:1,這代表在第一列中,白色連續出現2次,緊接著黑色出現1次,再來紅色會出現1次。
  5. 程式壓縮圖片時,會產生ColorDatabase.txt 和 ImageColor.txt紀錄圖片資訊。
  6. 圖片壓縮率的計算方式:(圖片byte數) / [(ColorDatabase.txt 的byte數)+(ImageColor.txt的byte數)]

執行方式/畫面:

壓縮率:

image image image image

解壓縮的結果:(非原圖比例,原圖太大)

image image image

檔案資訊:

image image image image image

影片:



s1083303 作業6

 

1、作業說明

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

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

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

2、開發環境

  • Windows 10
  • OpenCv 4.5.5
  • Python 3.10.1

3、程式說明

1)  讀取圖像

imread("[path]")讀取圖像。

2) Run-Length Encoding

Run-Length Encoding規則:

將原圖陣列中的值依照[值, 重複次數, 值, 重複次數...]進行轉換。比如:[1,1,2,2,3,3,3,3,4,4]會轉換為[1,2,2,2,3,4,4,2]。

將輸入影像以cv2.split(img) 拆分成B、G、R三個陣列,並以flatten()將二維陣列拉成一維陣列(將r[1][0]接到r[0][end]後面,再將r[2][0]接到後面...)。並依照上述Run-Length Eecoding方法壓縮。壓縮完成後,將原圖column大小、row大小與壓縮完成的資料以換行符('\n')為間隔存入新檔案中,並輸出壓縮後檔案。

假設有壓縮圖大小row * col = 2040 * 1800,則壓縮出來的檔案如下:

2040,1800,
0,2000,3,405,2,10,3,5,2,1,5,6,30,......,    //data of array B
52,2000,87,405,2,4,3,5,5,1,3,6,2,......,    //data of array G
87,405,2,4,3,5,5,1,3,6,2,25,2000,......,    //data of array R

3) Run-Length Decoding

Run-Length Decoding規則:

將壓縮後的值依照Run-Lengh Encoding反向操作,將[值1, 重複次數n1, 值2, 重複次數n2...]轉換成[值1, 值1,...(重複n1次), 值2, 值2,...(重複n2次), 值3...]。比如:[1,2,2,2,3,4,4,2]會轉換回[1,1,2,2,3,3,3,3,4,4]。

以readlines方法讀取檔案,line1為col、row資訊,line2、3、4分別為array B、G、R資訊,讀取到BGR陣列後以','為符號將其分隔並轉回int陣列。

將BGR三個陣列以上述Run-Length Decoding方法解壓縮回原樣。

最後以reshape(rows, cols)將B、G、R轉回二維陣列並以merge([b,g,r])合成回圖片進行驗證(驗證是否相同於未壓縮前)並輸出驗證結果與圖片。

4)  計算壓縮率並輸出

以課堂PPT(chapter08 pp.2) 計算Compression ratio: C = (b' / b),以及計算Relative data redundancy: R = 1 - 1/C 並輸出。

4、執行結果

執行程式後會列出Verify結果(是否與未壓縮前圖片相同)、壓縮前後檔案大小、Compression ratio、以及Relative data redundancy。




 

s1083312 作業7

 一、作業題目:

   請撰寫一個程式,利用數學型態學影像處理運算,計算出所附圖像(共三張)每張圖像中 圍棋個數

二、環境設置:
    1. windows10
    2. python 3.7
    3. opencv-python 

三、作業說明:
    1. 利用imread讀取圖片
    2.將圖片透過cvtColor轉成單通道
    3.設好threshold閾值將圖二值化
    4.進行侵蝕以及膨脹的動作直到能分離每顆圍棋
    5.使用HoughCircles函式找出圓形的部分
    6.透過HoughCircles找出的數據在圖片上標示出圓 用迴圈來跑 一行跑來畫圓心 一行跑來畫圓圈
    7.輪廓數量即為圍棋的數量
、執行結果:




IMG_5702: 原圖24顆,找到20顆(-4)



IMG_5703: 原圖31顆 找到28顆(-3)


IMG_5704: 原圖31顆 找到31顆(0)