【问题标题】:Why does hough transform for lines returning sinusoids divided halfway?为什么返回正弦曲线的线的霍夫变换会中途分开?
【发布时间】:2014-10-28 21:46:31
【问题描述】:

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

我已成功实现该算法,但它的输出将生成的正弦曲线分成两半。一半在结果图像的一个极端,其余在图像的另一部分。

这是我得到的输出示例:

这是我的代码:

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 的范围有什么帮助吗?

编辑:

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

这是我在只有一行的情况下实现算法的输出:

【问题讨论】:

    标签: python-2.7 numpy hough-transform


    【解决方案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 允许使用负数索引数组。此修复程序会将您的正弦曲线向右平移一半范围,因此它们不会再被分割。

    【讨论】:

    • 正确。 rho 确实需要两倍大才能正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多