C++ 关于广义hough变换码
我在寻找广义Hough变换的一个实现,然后我发现,它向我展示了GHT的一个完整实现 我完全理解算法是如何处理的,除了以下几点:C++ 关于广义hough变换码,c++,image-processing,hough-transform,C++,Image Processing,Hough Transform,我在寻找广义Hough变换的一个实现,然后我发现,它向我展示了GHT的一个完整实现 我完全理解算法是如何处理的,除了以下几点: Vec2i referenceP = Vec2i(id_max[0]*rangeXY+(rangeXY+1)/2, id_max[1]*rangeXY+(rangeXY+1)/2); 它基于hough空间的最大值计算对象的参考点,然后被rangXY乘以以返回到原始图像的相应位置。(rangeXY是图像被分割的正方形的像素尺寸。) 我将代码编辑为 Vec2i ref
Vec2i referenceP = Vec2i(id_max[0]*rangeXY+(rangeXY+1)/2, id_max[1]*rangeXY+(rangeXY+1)/2);
它基于hough空间的最大值计算对象的参考点,然后被rangXY
乘以以返回到原始图像的相应位置。(rangeXY
是图像被分割的正方形的像素尺寸。)
我将代码编辑为
Vec2i referenceP = Vec2i(id_max[0]*rangeXY, id_max[1]*rangeXY);
然后我得到了另一个参考点,它显然不符合形状
我就是搞不懂这个系数(rangeXY+1)/2
是什么意思
是否有人实施过此代码或熟悉GHT的基本原理,可以告诉我系数
rangeXY
的含义?谢谢~我熟悉经典的Hough变换,但不熟悉广义的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
时,您得到的是左上角的位置,而不是中心像素。rangeXY/2
看起来确实是一个更好的选择,因为5x5像素块的中心位于位置(2,2)而不是(3,3)。