我正在使用霍夫变换(极坐标)。我想从霍夫变换的坐标计算一条线的矢量表示。
我当前的实现循环遍历图像中从(0,0)到(M,N)的所有像素坐标,其中M和N是图像的大小。当循环遍历空间时,计算该值:
// angle和rho是霍夫空间的极坐标。
tmp =(int)((i * cos(angle))+(j * sin(angle)));
其中tmp - rho == 0,是该行的一部分,所以我跟踪该位置。当循环到达图像的末尾(i,j)==(M,N)时,循环再次从相反方向(M,N)到(0,0)完成。
第一个(tmp-rho == 0)从左到右,第二个(tmp-rho == 0)从右到左是该线的坐标。然后我减去那些像素坐标以得到霍夫空间中的线的矢量。
这非常低效(慢),我100%肯定有更好的方法来计算这个但是,我似乎无法弄明白。任何帮助将不胜感激!
答案 0 :(得分:5)
你可以求解你的等式i = 0,i = M,j = 0,j = N而不是循环
rho = i * cos(angle) + j * sin(angle)
i = 0 --> j1 = rho / sin(angle)
i = M --> j2 = (rho - M*cos(angle)) / sin(angle)
j = 0 --> i1 = rho / cos(angle)
j = N --> i2 = (rho - N*sin(angle)) / cos(angle)