Morphological Image Processing
請撰寫一個程式,利用數學型態學影像處理運算,計算出所附圖像共三張,列出每張圖像中圍棋個數。
環境需求
- windows 10
- python 3.7
- opencv 4.0
- numpy 1.15.1
- matplotlib 2.2.3
實現方法
主要方法是偵測每個物件的輪廓,計算有輪廓形狀的物件數量,根據輪廓內的面積篩掉棋子上的反光的雜訊
- 一開始使用
imread(image, 0)
,把讀進來的圖轉成灰階圖 - 讓圖像的細節模糊化,用
GaussianBlur()
,降低雜訊 - 再用
open = morphologyEx(image, MORPH_OPEN, kernel)
,用open morphology方法去除周遭的雜訊,這裡我設kernel為(30,30)大小的矩形,可以有效篩掉大多數的棋子上的反光 - 將open之後的結果做
threshold(open, 0, 255, THRESH_BINARY | THRESH_OTSU)
,這裡用Otsu’s algorithm偵測閾值,所以一開始初始閾值可以隨便給,之後會再修正 - 用sobel’s algorithm,偵測物件的邊緣,以偵測x , y軸的邊緣並取絕對值再疊加兩張軸的圖片
- 用
findContours(sobel, RETR_LIST, CHAIN_APPROX_SIMPLE)
找出所有物件輪廓 - 根據findContours找到物件數量,用
contourArea()
篩選掉剩下的棋子反光雜訊,這裡我以area < 10當作篩選條件,最後統計可能是黑子的數量
沒有留言:
張貼留言