CImg hough 实现是如何工作的?

How does the CImg hough implementation work?

Here is the example Hough Transform from the CImg library

我想弄清楚这个实现是如何工作的,因为它与您可能在网上找到的其他实现有很大不同。

据我了解,对于霍夫变换,您需要遍历每个边缘点并计算 180 度的 rho/theta 值以填充字段。

但在 CImg 实现中,当您按下 space 时,程序只是循环遍历每个像素并计算 rho/theta 一次,最后它仍然生成正确的结果。

我正在尝试在不借助任何库的情况下自行实现此功能,但我无法弄清楚它是如何工作的。我认为 "magic" 发生在循环之前拍摄的 2 个渐变图像之间,但我似乎无法弄清楚。

谁能指出我正确的方向?

double
  gx = grad[0](x,y),
  gy = grad[1](x,y);
double
  theta = std::atan2(gy,gx);

计算梯度的方向。这样我们就得到了 theta,而无需为每个点循环 180°。

我认为这基本上是一个索贝尔操作:

https://en.m.wikipedia.org/wiki/Sobel_operator