Реализация преобразования Hough без определения линии - PullRequest
0 голосов
/ 24 октября 2019

Меня удивляет тот факт, что я не могу найти какую-либо онлайн-реализацию алгоритма преобразования Хафа, как описано здесь . Opencv реализует детектор строк с использованием преобразования Хафа, но не предоставляет никакой функции, которая выполняет преобразование в пространство Хафа без обнаружения линии после.

Поэтому я сам реализовал наивную версию, где seg_map - это пустой массив, содержащий 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 в 200 раз быстрее для обнаружения преобразования Хафа + линии, чем мой алгоритм преобразования Хафа).

Таким образом, у меня фактически есть два вопроса:

  • Я пропустил стандартный python алгоритм для выполнения только преобразования Хафа без обнаружения линии? Я знаю, что OpenCV-версия кода имеет открытый исходный код, но она реализована на C ++.

  • Помимо параллелизации или реализации без Python, есть ли в моем коде что-то неэффективное идолжен быть изменен?

1 Ответ

0 голосов
/ 24 октября 2019

OpenCV является открытым исходным кодом. Пожалуйста, проверьте их код и посмотрите, как они его реализовали. Возьмите код, если это необходимо. URL здесь: https://github.com/opencv/opencv

...