首页 > 解决方案 > 用于 HoughCircle 的 Canny 变换 VS 脱粒图像

问题描述

我正在尝试使用带有这些参数的HoughCircle在图像上构建强大的硬币检测:

blured_roi = cv2.GaussianBlur(region_of_interest, (23, 23), cv2.BORDER_DEFAULT)
rows = blured_roi.shape[0]
circles = cv2.HoughCircles(blured_roi, cv2.HOUGH_GRADIENT, 0.9, rows/8,
param1=30, param2=50, minRadius=30, maxRadius=90)

感兴趣的区域可以是 (300x300) 或 (1080x1920)。所以minRadiusandmaxRadius在这里并没有真正的帮助。但在每种图像形状中,它们大约是我的硬币大小。

所以为了实现这一点,我尝试了很多事情。首先,使用带有GaussianBlur滤镜的简单灰色图像。它适用于大多数情况,但如果我的硬币边框与背景的色调相似,则灰度图像不会真正帮助检测我的圆的正确半径看看这个例子:

图 1图 2图 3

第二次,我尝试使用硬币的边缘来检测带有Canny Transform的圆圈,但正如您在上面看到的 Canny 过滤器没有像我希望的那样工作。所以我应用了GaussianBlur(13, 13) 的一个。

我也知道该HoughCircle方法内部还有另一个精明的转换调用,但我想确定我会得到硬币的边缘,因为我在使用GaussianBlur.

最后我尝试使用脱粒图像,但我不明白为什么它不能像例外那样工作,因为在这张图像上我们可以希望永远不会有任何噪音,因为它只是黑白(?),圆圈是几乎完美。并应用GaussianBlur(9, 9) 的 a。

脱粒精明的边缘结果 houghcircle 带有精巧的边缘

在这里,您可以看到它未能检测到脱粒图像上的硬币,但它适用于精明边缘图像。但在许多其他情况下,边缘检测上的霍夫变换给出了不完美的结果,我对 threshed 图像感到满意,正如你所看到的那样,它显示了一个漂亮的圆圈。

我想了解为什么它在脱粒图像上不起作用(如上面的示例),以及我可以做些什么来使它起作用。

编辑1:所以我发现了在方法中指定的不同类型的BORDERGaussianBlur。我认为改进 Threshed 图像上的霍夫圆检测非常有用,但它并没有像例外那样好。

标签: pythonopencvhough-transformcanny-operatoropencv-python

解决方案


推荐阅读