Я использую HoughTransformP для обнаружения переулков в OpenCV C ++.
Моя последовательность шагов для определения линии является базовой и выглядит следующим образом:
1. Bird Eye View of image
2. Grayscale image
3. Guassian Blur image
4. Canny Edge detect
5. HoughTransformP canny image
6. Filter out horizontal lines based on slope
Выходные данные после обнаружения края:
Проблема в том, что HougLinesP выдает несколько строк, а не только дорожки. Вывод выглядит примерно так:
Я пытаюсь получить что-то вроде этого:
Как я могу отфильтровать беспорядок линий и нарисовать только линии линий?
Схема возможного алгоритма:
Кластеризация сегментов линии: ссылаясь, например, на следующее изображение, вы сможете пометить каждый сегмент с помощью 1
, 2
, 3
или же 4
,
Для каждого кластера найдите «среднюю линию».
Приведите отрезки в Гессенская нормальная форма
x*cos(beta)+y*sin(beta)-p=0
где p
это расстояние между сегментом и началом и beta
это угол, который вы видите на следующем изображении:
Вы можете кластеризовать отрезки с помощью правильной техники машинного обучения, например, с вектором входных объектов [p, beta]
, то вы можете найти «среднюю линию», например, усредняя оба b
а также beta
,
Скажем, у вас есть два сегмента [p_1, beta_1]
а также [p_2, beta_2]
принадлежащих к одному кластеру, средний сегмент [(p_1+p_2)/2, (beta_1+beta_2)/2]
,
Других решений пока нет …