关于广义霍夫变换代码

时间:2017-04-14 01:47:46

标签: c++ image-processing hough-transform

我正在寻找广义Hough变换的实现,然后我找到了this website,它向我展示了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); 

然后我得到了另一个参考点show all edgePoints in the image,这显然不符合形状。

我无法弄清楚因素(rangeXY+1)/2的含义。

是否有人实施此代码或熟悉GHT的理由可以告诉我rangeXY因素的含义是什么?感谢〜

1 个答案:

答案 0 :(得分:0)

我熟悉经典的Hough变换,但不是广义的变换。但是,我相信你在问题中提供了足够的信息,让我在不熟悉相关算法的情况下回答它。

(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时,你得到的是左上角而不是中心像素的位置。