关于广义霍夫变换代码

About generalized hough transform code

本文关键字:代码 霍夫变换 于广义      更新时间:2023-10-16

我正在寻找广义霍夫变换的实现,然后我找到了这个网站,它向我展示了GHT的完整实现。

我完全可以理解算法的处理方式,除了这个:

Vec2i referenceP = Vec2i(id_max[0]*rangeXY+(rangeXY+1)/2, id_max[1]*rangeXY+(rangeXY+1)/2);  

它根据霍夫空间的最大值计算物体的参考点,然后通过rangXY多次返回原点图像的相应位置。(rangeXY是分割图像的正方形的像素尺寸。

我编辑了代码以

Vec2i referenceP = Vec2i(id_max[0]*rangeXY, id_max[1]*rangeXY); 

我得到了另一个参考点,然后在图像中显示所有边缘点,这显然不适合形状。

我只是无法弄清楚(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时,您将获得左上角的位置而不是中央像素的位置。