我感到惊讶的是,我似乎找不到任何在线实现的霍夫变换算法所描述的here。Opencv实现了一个使用Hough变换的线检测器,但是没有提供任何函数来执行到Hough空间的变换而不进行线检测。你知道吗
所以我自己实现了一个简单的版本,其中seg\u map是一个numpy数组,包含0
和1
:
def hough_transform(seg_map):
rho_step = 5
phi_step = 20 * np.pi/180
n_points_min = 2*rho_step
diag_length = np.sqrt(seg_map.shape[0]**2 + seg_map.shape[1]**2)
hough_map = np.zeros( (int(2*np.pi/phi_step),int(diag_length/rho_step)) )
Y, X = np.where(seg_map>0)
for x, y in zip(X, Y):
theta = np.arctan2(y, x)
r = np.sqrt(x**2+y**2)
for i in range(hough_map.shape[0]):
phi = i * phi_step - np.pi/2
rho = r * np.cos(theta-phi)
if rho>0:
rho_discretized = int(rho/rho_step)
hough_map[i, rho_discretized] += 1
return hough_map
然而,它相当慢(对于我的输入,cv2函数对于Hough变换+线检测比我的Hough变换算法快200倍)。你知道吗
所以我有两个问题:
我是否错过了一个只执行Hough变换而不进行行检测的现成的python算法?我知道OpenCV版本的代码是开源的,但是它是用C++实现的。
除了并行化或非Python实现之外,我的代码中是否存在一些低效的东西,应该进行更改?
OpenCV是开源的。请检查他们的代码,看看他们是如何实现的。如果需要,借用代码。网址在这里:https://github.com/opencv/opencv
相关问题 更多 >
编程相关推荐