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°。
我认为这基本上是一个索贝尔操作:
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°。
我认为这基本上是一个索贝尔操作: