霍夫圈太敏感了

问题描述

我正在尝试检测抗生素敏感性测试图像中的圆圈。使用我的代码,它检测到 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()

原图:

enter image description here

结果图像:

enter image description here

解决方法

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...