Canny将VS脱粒图像转换为HoughCircle

时间:2019-07-03 08:37:14

标签: python opencv hough-transform canny-operator opencv-python

我正在尝试使用具有以下参数的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)。因此minRadiusmaxRadius在这里并没有帮助。但是在每种图像形状中,它们的大小大约都相当于我的硬币大小。

为此,我尝试了很多事情。首先,使用带有GaussianBlur滤镜的简单灰色图像。 可以在大多数情况下使用,但是如果我的硬币边框与背景色类似,则灰度图将无法真正帮助检测圆的半径,请看以下示例:

image 1 image 2 image 3

第二次,我尝试使用硬币的边缘来检测Canny Transform的圆圈,但是正如您所见,Canny滤镜无法按我希望的那样工作。所以我将GaussianBlur设为(13,13)。

我也知道HoughCircle方法中还有另一个canny transform调用,但是我想确保我会得到硬币的边缘,因为在{ {1}}。

最后,我尝试使用经过脱粒处理的图像,但我不明白为什么它不如预期的那样好用,因为在此图像上,我们希望不会有任何噪音,因为它只是黑白(?),并且这个圆圈几乎是完美的。并应用(9,9)的GaussianBlur

threshed canny edges result houghcircle with canny edges

在这里您可以看到它未能检测到脱粒图像上的硬币,但是它可以与Canny边缘图像一起使用。但是在许多其他情况下,边缘检测中的霍夫变换无法得到完美的结果,而且我对脱粒图像感到一致,如您所见,脱粒图像显示出一个漂亮的圆圈。

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

编辑1:因此,我发现了GaussianBlur方法中要指定的另一种BORDER类型。我认为改进“脱粒”图像上的哈夫圆检测确实很有用,但效果不如预期。

0 个答案:

没有答案