2021年6月12日 星期六

s1071534 影像處理作業7

作業說明:

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

a.    請在部落格呈現經由數學型態學影像處理運算後的圖像,同時要呈現你程式輸出棋子數量的螢幕截圖。

b.    程式不一定可以算出正確棋子數量,越接近正確答案越好!

執行環境:

  • windows10
  • Python 3.6
  • OpenCV 4.5.1

實作方式:

1. 讀取圖片,並將其resize為(1036,690)
2. 對圖片做二質化
3. 使用 cv2.HoughCircles 找出圖片中圓形部分
4. 將找到的圓畫在二質化的圖片上
5. 使用cv2.getStructuringElement設定kernal為橢圓形(經過測試橢圓的效果較佳)
6. 先對圖片做兩次膨脹(去除亮點雜訊)
7. 在對圖片做九次侵蝕(分離棋子)
8. 在對圖片做五次膨脹(使結果明顯化)
9. 使用cv2.findContours計算共有幾顆棋子

執行結果:

1. circle_IMG_5702.JPG
原圖

侵蝕與膨脹處理後的圖

將結果與原圖重疊
實際數量:24 辨識結果:24

2. circle_IMG_5703.JPG
原圖

侵蝕與膨脹的結果

將結果與原圖重疊
實際數量:31 辨識數量30
3. circle_IMG_5704.JPG
原圖

侵蝕與膨脹結果

將結果與原圖重疊
實際數量:31 辨識數量:31
實作心得:
一開始打算單純使用侵蝕與膨脹的技巧做數量的辨識,
但是經過不斷嘗試更改重複侵蝕與膨脹的次數、侵蝕與膨脹的交替使用、多種kernal的組合...等,
都無法解決不同的圖片都需要各自調整參數的問題,
後來加上了HoughCircles,
才得以完成在不修改參數的情況下98.8%的辨識率((24+30+31)/(24+31+31))







沒有留言:

張貼留言