Canny transform VS молотить изображение для HoughCircle - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь создать надежное обнаружение монет на изображениях, используя HoughCircle со следующими параметрами:

blured_roi = cv2.GaussianBlur(region_of_interest, (23, 23), cv2.BORDER_DEFAULT)
rows = blured_roi.shape[0]
circles = cv2.HoughCircles(blured_roi, cv2.HOUGH_GRADIENT, 0.9, rows/8,
param1=30, param2=50, minRadius=30, maxRadius=90)

Область интереса может быть (300x300) или (1080x1920). Так что minRadius и maxRadius здесь не особо помогают. Но они примерно размером с мою монету в каждом типе формы изображения.

Итак, чтобы добиться этого, я пробовал много вещей. Прежде всего, используя простое серое изображение с фильтром GaussianBlur. Это работает в большинстве случаев, но если границы моей монеты имеют такой же оттенок, что и фон, изображение в шкале СЕРЫЙ не поможет определить правильный радиус моего круга, взгляните на этот пример:

image 1image 2image 3

Во второй раз я попытался использовать края монеты для обнаружения кругов с помощью Canny Transform , но, как вы можете видеть выше, фильтр Canny не работает, как я надеялся. Поэтому я применил GaussianBlur из (13, 13).

Я также знаю, что внутри метода HoughCircle есть еще один сложный вызов преобразования, но я хотел быть уверен, что получу края монеты, потому что я теряю их, размывая с помощью GaussianBlur .

Наконец, я попытался использовать обмолоченное изображение, но я не могу понять, почему оно не работает так же хорошо, как исключение, потому что на этом изображении мы можем надеяться, что никогда не будет никаких шумов, потому что это только черно-белое (?), И круг почти идеален. И применил GaussianBlur из (9, 9).

threshedcanny edgesresult houghcircle with canny edges

Здесь вы можете увидеть, что не удалось обнаружить монету на обмолоченном изображении, но он работает с изображением хитрых краев. Но во многих других случаях Hough Transform при обнаружении краев дает неидеальный результат, и я чувствую себя уверенно относительно обмолоченного изображения, которое, как вы можете видеть, показывает хороший круг.

Я хотел бы понять, почему он не работает на молотом изображении (как в примере выше), и что я мог сделать, чтобы это работало.

EDIT 1: Итак, я обнаружил другой тип BORDER для указания в методе GaussianBlur. Я подумал, что было бы действительно полезно улучшить обнаружение крутых кругов на изображении Молот, но это не так хорошо, как исключение.

...