cv::HoughCircles 中的 dp 参数究竟是如何工作的?

How exactly does dp parameter in cv::HoughCircles work?

我在 Stack Overflow 中读到了类似的内容 question。我试过了,但我还是不明白它是如何工作的。

我阅读了OpenCV文档cv::HoughCircles,这里有一些关于dp参数的解释:

Inverse ratio of the accumulator resolution to the image resolution. For example, if dp=1 , the accumulator has the same resolution as the input image. If dp=2 , the accumulator has half as big width and height.

这是我的问题。比如dp=1,accumulator的大小和image一样,image中的像素点和accumulator中的位置是一致的一一匹配,但是dp=2,怎么匹配?​​

提前致谢。

这里没有 one-to-one 匹配这样的东西。您确实有一张带有像素和 hough space 的图像,用于为圈子投票。这个参数只是一个方便的方式来指定 hough space 相对于图像大小的大小。

请查看此了解更多详情。

编辑:

您的图片有 (x,y) 坐标。您的圆 space 具有 (a,b,r) 坐标,而 (a,b) 是圆心,r 是半径。假设您找到了一个边缘像素。现在你为每个可以穿过这个边缘像素的圆圈投票。我发现 this 霍夫 space 的漂亮照片有 投票,即 边缘像素(连续情况)。实际上,这种投票发生在 3D 累加器矩阵中。您可以将其视为这种连续情况的光栅化。

现在,如前所述,dp 参数定义了此累加器矩阵相对于您的图像大小的大小。 dp 参数越大,光栅化的分辨率越低。这就像用不同的分辨率拍摄照片。如果您缩小照片的尺寸,多个像素将减少为一个像素。如果您减少累加器矩阵分别增加 dp 参数,也会发生同样的情况。不同圆心(彼此相邻)和半径(大小相似)的多个投票现在合并,即您确实获得了不太准确的圆参数,但更多 "robust" 投票。

请注意,OpenCV 的实现稍微复杂一些(他们使用霍夫梯度法而不是标准的霍夫变换),但注意事项仍然适用。