2021年6月13日 星期日

s1071441 影像處理作業7

 一、作業說明

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


二、作業環境&語言

Windows 10

Visual Studio Code 1.54.3

OpenCV 4.5.1.48

Python 3.8.3

Numpy 1.19.5


三、實作方法與分析

讀圖轉灰階並二值化

先用close運算盡量去掉反光的區域

用getStructuringElement 方法用MORPH_ELLIPSE 做kernel

用erode做腐蝕並用較小的kernel做dilate

藉由相連區域區分每個相連的區域取出每個相連區域的面積,並把面積過大的相連區域取出


為避免原本就很小的區域被erode到消失,把面積大的去出來特別做erode

--->

addweighted回原圖

但發現其中一張圖有一顆圍棋反光面積過大,導致二值化再腐蝕會消失


最後選擇先用霍夫測圓

把已經測到的圓去掉
做erode-->

最後把測到的圓的數量跟erode之後剩下的相連區域數量加起來
準確率100%

分析 : 做erode用的kernel 大小跟形狀都很重要,一開始用初始的矩形kernel怎麼都做不好,換成MORPH_ELLIPSE後結果就變好多了


四、執行結果




22 + 2 = 24 (實際24顆)



29 + 2 = 31(實際31顆)


31 + 0 = 31(實際31顆)






沒有留言:

張貼留言