为什么hough变换返回正弦波的线路中途?

时间:2014-10-28 21:46:32

标签: python-2.7 numpy hough-transform

我一直在使用Python和numpy实现标准的Hough变换进行线检测。

我已经成功地实现了算法,但它的输出产生的正弦曲线被分成两半。一半在所得图像的一个极端,其余部分在图像的另一部分。

以下是我得到的输出示例:

This is the result of the algorithm.

这是我的代码:

def houghTransf(img, r_ro, r_theta,thrs):

    linhas, colunas =img.shape

    theta = np.linspace(0.0,180.0,np.ceil(180.0/r_theta)+1)

    max_rho = np.sqrt((linhas**2)+(colunas**2))

    rho = np.linspace(0.0,max_rho,np.ceil(max_rho/r_ro)+1)


    res = np.zeros((len(theta),len(rho)))

    # Hough Transform

    for i in range(linhas):
        for j in range(colunas):
            if(img[i,j]<>0):
                for k in theta:
                    v_rho = i*np.sin(k*(np.pi/180)) + j*np.cos(k*(np.pi/180))
                    res[k,v_rho] += 1

    return res

我怀疑问题出现在霍夫空间的定义中(thetarho的定义),但更改每个linspace的最小限制不会似乎有所帮助。

有没有办法显示正弦波而不像图像那样划分它们?

可以以任何方式调整rhotheta帮助的范围吗?

编辑:

我也试过只运行一行算法。

enter image description here

这是我执行算法的输出,其中只有一行:

enter image description here

1 个答案:

答案 0 :(得分:1)

请注意,在此行之后:

v_rho = i*np.sin(k*(np.pi/180)) + j*np.cos(k*(np.pi/180))

v_rho最终可能会消极。你应该为它添加一半的范围,如下所示:

v_rho = 1.0*len(rho)/2 + i*np.sin(k*(np.pi/180)) + j*np.cos(k*(np.pi/180))

(你需要验证范围是否正常,或许rho现在需要两倍大,不确定。)

问题对您来说是隐藏的,因为Python和numpy允许使用负数索引数组。此修复程序会将您的正弦曲线的一半转换为右侧,因此它们将不再分裂。