顯示具有 1061420 標籤的文章。 顯示所有文章
顯示具有 1061420 標籤的文章。 顯示所有文章

2021年6月12日 星期六

s1061420 影像處理作業7

  作業說明:

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

開發環境:

l   Windows 10

l   Visual Studio 2019

l   Python 3.8

l   OpenCV 4.5.1


程式說明:
1. 將圖片用 threshold 進行二值化
2. 將圖片反白
3. 進行 closing 處理,先膨脹再侵蝕,消去棋子中間細小多餘的黑點
4. 進行 opening 處理,先侵蝕再膨脹,將棋子外圍突出的白色尖角鈍化
5. 進行侵蝕處理,並用 findContours 計算剩餘的白色區域

輸出結果:











IMG_5702.JPG 原圖













IMG_5702_output.JPG 輸出後的圖











IMG_5703.JPG 原圖










IMG_5703_output.JPG 輸出後的圖












IMG_5704.JPG 原圖








IMG_5704_output.JPG 輸出後的圖





輸出結果:
IMG_5702.JPG :
實際棋子數量 : 24
預測棋子數量 : 23

IMG_5703.JPG :
實際棋子數量 : 31
預測棋子數量 : 30

IMG_5704.JPG :
實際棋子數量 : 31
預測棋子數量 : 31

2021年6月4日 星期五

s1061420 影像處理作業 6

 作業說明:

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

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

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

開發環境:

l   Windows 10

l   Visual Studio 2019

l   Python 3.8

l   OpenCV 4.5.1

程式說明:

    壓縮檔案:

1. 使用 cv2.split() 將各個 rgb 通道分離

2. 分別將各個通道 rgb 值用 Run-length encoding 轉成一維 uint8 陣列,以第一個為 rgb 值,第二個為出現次數的方式儲存

3. 若同一個數值數量超過 uint8 可以儲存的數量,則分為多個陣列儲存

4. 將步驟2. 得到的陣列以及圖片的寬高存入檔案,並命名為:圖片名字 + _compress.s1061420

    解壓縮檔案:

1. 得到各個 rgb 通道的值,並 reshape 為二維陣列

2. 將 rgb 通道 merge 為圖片

3. 將圖片存為:圖片名字 + _decompress.bmp

輸出結果:










        img1原圖


   








        img1 解壓縮後的圖  img1_decompress.bmp










        img2 原圖










         img2 解壓縮後的圖  img2_decompress.bmp










        img3原圖










         img3 解壓縮後的圖   img3_decompress.bmp


平均壓縮率 = ( 13.9 / 2.10 + 13.9 / 3.46 + 13.9 / 2.00 ) / 3 = 5.86






        img1比較  


由左至右分別為:原圖 -> 壓縮檔 -> 解壓縮後的圖






        img2比較






    

        img3比較