我一直在使用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
我怀疑问题出现在霍夫空间的定义中(theta
和rho
的定义),但更改每个linspace
的最小限制不会似乎有所帮助。
有没有办法显示正弦波而不像图像那样划分它们?
可以以任何方式调整rho
和theta
帮助的范围吗?
编辑:
我也试过只运行一行算法。
这是我执行算法的输出,其中只有一行:
答案 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
允许使用负数索引数组。此修复程序会将您的正弦曲线的一半转换为右侧,因此它们将不再分裂。