无需行检测的Hough变换实现

2024-09-18 15:20:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我感到惊讶的是,我似乎找不到任何在线实现的霍夫变换算法所描述的here。Opencv实现了一个使用Hough变换的线检测器,但是没有提供任何函数来执行到Hough空间的变换而不进行线检测。你知道吗

所以我自己实现了一个简单的版本,其中seg\u map是一个numpy数组,包含01

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实现之外,我的代码中是否存在一些低效的东西,应该进行更改?


Tags: 函数版本算法mapstepnppiint