середа, 14 квітня 2021 р.

Перетворення Хафа для кола

Mathedemo
Фазовий простір Хафа для кола визначається трьома параметрами -- центром кола $(x,y)$ і радіусом кола $R.$ Відповідні накопичення відбуваються у 3D-масиві.

Функція OpenCV для виявлення кіл -- cv2.HoughCircles:

circles=cv2.HoughCircles (image, method, dp, minDist, param1 = 100,  param2 = 100, \
  minRadius = minRadius, maxRadius = maxRadius)

де

  • circles: вектор знайдених кіл у форматі $(x, y, radius)$
  • image: вхідне напівтонове зображення.
  • method: cv2.HOUGH_GRADIENT
  • dp: відношення роздільної здатності акумулятора до роздільної здатності зображення. Наприклад, якщо $dp = 1$, акумулятор має таку ж роздільну здатність, що і вхідне зображення. Якщо $dp = 2$, акумулятор має вдвічі меншу ширину та висоту.
  • minDist: мінімальна відстань між центрами виявлених кіл. Якщо параметр занадто малий, на додаток до істинного може бути помилково виявлено кілька сусідських кіл. Якщо він занадто великий, деякі кола можуть бути пропущені.
  • param1: це найвищий поріг який використовувався в детекторі Кенні ( якщо використовувався).
  • param2: поріг накопичувача для центрів кіл на етапі виявлення. Чим він менший, тим більше помилкових кіл може бути виявлено.
  • minRadius: мінімальний радіус кола.
  • maxRadius: максимальний радіус кола.
img=cv2.imread('file.jpg')
copy = img.copy()
img_gray=cv2.cvtColor(copy,cv2.COLOR_BGR2GRAY)
#img_blur = cv2.medianBlur(img_gray, 5) - при потребі
circles = cv2.HoughCircles(img_gray, cv2.HOUGH_GRADIENT, 1.4, 40, param1=150, param2=50, minRadius=60, maxRadius=100)
if circles is not None:
    circles = np.uint16(np.around(circles))
    for i in circles[0, :]:
        cv2.circle(copy, (i[0], i[1]), i[2], (0, 255, 0), 3)
#кількість  монет
print(len(circles[0]))

Немає коментарів:

Дописати коментар