无法在圆检测的霍夫变换中正确计算 [a, b] space

Unable to properly calculate [a, b] space in Hough transformation for circle detection

在[a,b]中进行累加的函数代码space

输出

尽管我使用的是 3 维数组,但下图是二维的,只是为了说明问题。

在 [a, b] 中累积之前执行的步骤 space

  1. 使用 3x3 高斯滤波器进行平滑处理。
  2. 使用 returns 幅度和方向图的 Sobel 算子进行边缘检测。
  3. 阈值化和细化。

来源 我正在使用 使用 Hough 变换的圆检测 Jaroslav Borovicka 的文档 提供指导。

我在您的代码中看到的一个问题是每个 r 只设置了一个点。你需要两个。请注意,渐变为您提供了边缘的方向,但您不知道朝向中心的方向——除非您正在计算带有实心圆盘的图像的渐变,并且您知道与背景的对比度(即它是总是白底黑字或黑底白字)。通常,一个点在距离 r 方向 theta 处设置一个点,另一个在方向 theta + pi.

处设置一个点

您可能遇到的另一个问题是梯度计算不准确。如果你在二值化图像上计算它,梯度的方向将会偏离很多。在计算梯度之前对灰度图像进行加工可能会有所帮助(或者更好,使用 Gaussian gradients)。

"Smoothing using 3x3 Gaussian filter" 根据定义是错误的。参见上面的link。

"Thresholding and thinning" -- 尽量不要设置阈值。您的代码设置为使用梯度幅度作为权重进行累积。使用它们,它们会有所帮助。

最后,不要使用atan,而是使用atan2