我在堆栈溢出中阅读了类似的question。我尝试过,但是我仍然不明白它是如何工作的。
我阅读了OpenCV文档cv::HoughCircles,这是有关dp参数的一些说明:
这是我的问题。例如,如果dp = 1,则累加器的大小与图像相同,则图像中的像素与累加器中的位置之间存在一对一的一致匹配,但是如果dp = 2,该如何匹配?
提前致谢。
最佳答案
这里没有一对一的比赛。您的图像确实具有像素和hough空间,用于对圈子进行投票。此参数只是指定相对于图像大小的hough空间大小的便捷方法。
请查看此answer了解更多详细信息。
编辑:
您的图片具有(x,y)
-coordinates。您的圆圈hough空间具有(a,b,r)
-坐标,而(a,b)
是圆圈中心,而r
是半径。假设您找到一个边缘像素。现在,您为每个圆圈投票,该圆圈可能会通过该边缘像素。我发现ojit_是一个具有单个投票的霍夫空间的漂亮图片,即单个边缘像素(连续的情况)。实际上,这种投票发生在3D累加器矩阵内。您可以将其视为此连续案例的栅格化。
现在,如上所述,dp
参数定义了相对于您的图像大小的此累加器矩阵的大小。 dp
参数越大,栅格化的分辨率越低。这就像以不同的分辨率拍照。如果您缩小照片的尺寸,则多个像素将减少为一个像素。如果减少累加器矩阵或分别增加dp
参数,也会发生相同的情况。现在合并了不同圆心(彼此相邻)和半径(大小相似)的多个选票,即您确实获得了较不准确的圆参数,但投票更加“稳健”。
请注意,OpenCV的实现稍微复杂一些(它们使用Hough梯度方法而不是标准的Hough变换),但注意事项仍然适用。