【发布时间】: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