问题描述
我正在尝试检测抗生素敏感性测试图像中的圆圈。使用我的代码,它检测到 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),3)
cv2.circle(img_orig,2,255,255),3)
ims = cv2.resize(img_orig,(600,540))
cv2.imshow("output",ims)
cv2.waitKey(0)
cv2.destroyAllWindows()
原图:
结果图像:
解决方法
你能先用 Canny() 边缘检测得到圆的边缘吗?