关于广义霍夫变换代码
About generalized hough transform code
我一直在寻找广义霍夫变换的实现,然后我找到了 this website,它向我展示了 GHT 的完整实现。
除此之外,我完全可以理解算法的处理方式:
Vec2i referenceP = Vec2i(id_max[0]*rangeXY+(rangeXY+1)/2, id_max[1]*rangeXY+(rangeXY+1)/2);
根据hough的最大值space计算出物体的参考点,然后乘以rangXY
得到原图对应的位置。(rangeXY
是分割图像的正方形的像素尺寸。)
我将代码编辑为
Vec2i referenceP = Vec2i(id_max[0]*rangeXY, id_max[1]*rangeXY);
然后我得到了另一个参考点 show all edgePoints in the image,这显然不符合形状。
我就是不明白这个因素(rangeXY+1)/2
是什么意思。
有没有实现过这段代码或者熟悉GHT基本原理的人可以告诉我rangeXY
这个因素是什么意思?谢谢~
我熟悉经典的霍夫变换,但不熟悉广义的霍夫变换。但是,我相信你在你的问题中提供了足够的信息让我在不熟悉所讨论算法的情况下回答它。
(rangeXY+1)/2
只是四舍五入的整数除以 2。例如 (4+1)/2
给出 2 而 (5+1)/2
给出 3(2.5 舍入)。现在,由于 rangeXY
是正方形像素块的边,而 id_max
是这样一个块的位置(索引),那么 id_max[dim]*rangeXY+(rangeXY+1)/2
给出了该块中中心像素的位置.
另一方面,当您将表达式简化为 id_max[dim]*rangeXY
时,您得到的是左上角而不是中心像素的位置。
我一直在寻找广义霍夫变换的实现,然后我找到了 this website,它向我展示了 GHT 的完整实现。
除此之外,我完全可以理解算法的处理方式:
Vec2i referenceP = Vec2i(id_max[0]*rangeXY+(rangeXY+1)/2, id_max[1]*rangeXY+(rangeXY+1)/2);
根据hough的最大值space计算出物体的参考点,然后乘以rangXY
得到原图对应的位置。(rangeXY
是分割图像的正方形的像素尺寸。)
我将代码编辑为
Vec2i referenceP = Vec2i(id_max[0]*rangeXY, id_max[1]*rangeXY);
然后我得到了另一个参考点 show all edgePoints in the image,这显然不符合形状。
我就是不明白这个因素(rangeXY+1)/2
是什么意思。
有没有实现过这段代码或者熟悉GHT基本原理的人可以告诉我rangeXY
这个因素是什么意思?谢谢~
我熟悉经典的霍夫变换,但不熟悉广义的霍夫变换。但是,我相信你在你的问题中提供了足够的信息让我在不熟悉所讨论算法的情况下回答它。
(rangeXY+1)/2
只是四舍五入的整数除以 2。例如 (4+1)/2
给出 2 而 (5+1)/2
给出 3(2.5 舍入)。现在,由于 rangeXY
是正方形像素块的边,而 id_max
是这样一个块的位置(索引),那么 id_max[dim]*rangeXY+(rangeXY+1)/2
给出了该块中中心像素的位置.
另一方面,当您将表达式简化为 id_max[dim]*rangeXY
时,您得到的是左上角而不是中心像素的位置。