【问题标题】:Hough Circle way too sensitive霍夫圈太敏感了
【发布时间】:2021-05-14 04:36:50
【问题描述】:

我正在尝试检测抗生素敏感性测试图像中的圆圈。使用我的代码,它检测到 7 个圆圈,但是它绘制的圆圈太多(您可以在下面的链接中找到原始图像和结果)。如何让检测准确?

P.S: 我知道我要检测的 minRadius 是 20mm≈75pixels 而 maxRad 是 50mm≈190pixels

import cv2
import numpy as np

image= "atbg.jpg"
img= cv2.imread(image,1)
img_orig=img.copy()
img= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
img = cv2.GaussianBlur(img,(21,21),cv2.BORDER_DEFAULT)

all_circs=cv2.HoughCircles(img,cv2.HOUGH_GRADIENT,1,10, param1=50, param2=30, minRadius=75 , maxRadius=190) 
all_circs_rounded= np.uint16(np.around(all_circs))
for (x, y ,r) in all_circs_rounded[0, :]:
    cv2.circle(img_orig, (x, y), r, (0, 0, 0), 3)
    cv2.circle(img_orig, (x, y), 2, (0, 255, 255), 3)

imS = cv2.resize(img_orig, (600, 540))                  
cv2.imshow("output", imS) 
cv2.waitKey(0)
cv2.destroyAllWindows()

原图:

结果图片:

【问题讨论】:

  • 这能回答你的问题吗? Detect circles in openCV
  • 我认为 OpenCV 霍​​夫圆变换不能解决这个问题。霍夫圆检测的另一种实现可以工作,但中心圆很难检测。在这张图片中,圆圈比它的周围更暗,OpenCV Hough 圆圈变换不使用这个信息。
  • @PatricioLoncomilla 我明白了,在这种情况下,您知道我可以使用其他方法来检测圆并计算它们的直径吗?
  • 也许您可以先检测小圆圈,因为它们是真实圆圈的中心。知道圆心后,您可以从圆心向外投射线并检测给定圆的交点(点)。由于这些点必须与原始圆圈相对应,因此您可以使用 RANSAC 对其进行检测。

标签: python opencv hough-transform


【解决方案1】:

你能先用 Canny() 边缘检测得到圆的边缘吗?

【讨论】:

  • cv2.HoughCircles() 在内部计算一个精巧的边缘检测器
猜你喜欢
  • 2015-11-24
  • 1970-01-01
  • 1970-01-01
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
  • 2019-10-26
  • 1970-01-01
相关资源
最近更新 更多