python - 用于 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)。所以minRadius
andmaxRadius
在这里并没有真正的帮助。但在每种图像形状中,它们大约是我的硬币大小。
所以为了实现这一点,我尝试了很多事情。首先,使用带有GaussianBlur
滤镜的简单灰色图像。它适用于大多数情况,但如果我的硬币边框与背景的色调相似,则灰度图像不会真正帮助检测我的圆的正确半径看看这个例子:
第二次,我尝试使用硬币的边缘来检测带有Canny Transform的圆圈,但正如您在上面看到的 Canny 过滤器没有像我希望的那样工作。所以我应用了GaussianBlur
(13, 13) 的一个。
我也知道该HoughCircle
方法内部还有另一个精明的转换调用,但我想确定我会得到硬币的边缘,因为我在使用GaussianBlur
.
最后我尝试使用脱粒图像,但我不明白为什么它不能像例外那样工作,因为在这张图像上我们可以希望永远不会有任何噪音,因为它只是黑白(?),圆圈是几乎完美。并应用GaussianBlur
(9, 9) 的 a。
在这里,您可以看到它未能检测到脱粒图像上的硬币,但它适用于精明边缘图像。但在许多其他情况下,边缘检测上的霍夫变换给出了不完美的结果,我对 threshed 图像感到满意,正如你所看到的那样,它显示了一个漂亮的圆圈。
我想了解为什么它在脱粒图像上不起作用(如上面的示例),以及我可以做些什么来使它起作用。
编辑1:所以我发现了在方法中指定的不同类型的BORDERGaussianBlur
。我认为改进 Threshed 图像上的霍夫圆检测非常有用,但它并没有像例外那样好。
解决方案
推荐阅读
- jquery-validate - jquery验证文件输入不起作用
- c# - ASP.NET Core 3.1、i18n - 用户内容的本地化
- sequelize.js - 如何在 Sequelize 上写左连接?
- excel - 从范围内的单元格复制值并将它们粘贴到范围内的随机单元格中
- angular - 如何使用 rxjs 和 Angular 9 控制服务调用的流程?
- clojure - 在clojure / core.logic中最小化/最大化可能?
- linux - 如何将 VitualHost 配置指向 Apache2.4 中的 Web 应用程序
- javascript - 如何在更新时将单击的表格行数据传输到输入
- sql - Is it possible to create one index for both primary and foreign key?
- laravel - 如何使用 Vue js 删除数据?