Извлечь линии, указывающие вверх - PullRequest
14 голосов
/ 24 мая 2019

Мы пытаемся обнаружить линии дорожек на беговой дорожке (и с этой информацией о предстоящем направлении).

В настоящее время мы используем следующие (упрощенные) шаги:

  1. Двоичный: преобразование ввода с двоичным порогом

  2. Обрезано: обрезать интересующую область (в настоящее время только нижняя половина изображения)

  3. Canny: обнаруживает ребра и группирует их с помощью HoughLinesP

  4. Восходящие линии и закрытие: сохраняйте только линии с экстремальным наклоном - игнорируйте горизонтальные линии

  5. Результат: найдите подключенные компоненты и установите квадратичную функцию через каждую линию

Это работает в целом (примеры: direct.png, left.png), но имеет проблемы, если, например, горизонтальная линия соединения не была удалена (пример: problem.png - внизу справа и внизу слева).В таком случае две линии и соединение интерпретируются как один подключенный компонент.

Поскольку наша точка зрения может сильно отклоняться слева направо (камера установлена ​​на бегущем человеке), определить довольно сложнопорог наклона для линий, указывающих вверх.

Есть ли лучший способ избавиться от линий треков, не указывающих вверх?Поскольку текущее решение с canny, грубым преобразованием и фильтрацией наклона не является оптимальным для кривых и иногда вообще не работает (как описано выше).

Можно ли было бы перейти от обрезанного изображения прямо кразделенные линии с помощью операций морфологии?Аналогично этому примеру .Я знаю, что у нас нет строгих горизонтальных линий, которые делают любое подходящее ядро ​​намного более сложным (я полагаю).

В настоящее время мы пытаемся использовать перспективные преобразования, чтобы получить вид птицы на дорожке.Это должно помочь различить горизонтальные и направленные вверх линии.

Другая небольшая проблема - слишком короткие линии, которые приводят к неточным приближенным квадратичным функциям (большинство левых строк в problem.png и direct.png).Это может быть легко решаемо (требуя минимального количества пикселей для компонента, который будет считаться линией дорожки) и не должно быть частью этого вопроса.

РЕДАКТИРОВАТЬ (ответить на вопросы из vlad_tepesch)

Что с кривыми?должны ли они быть частью ваших моделей дорожек или нет?

Мы явно хотим определить кривые беговой дорожки - так как это необходимо для оценки направления.Но мы хотим игнорировать (убрать) горизонтальную кривую подключения в нижней части файла problem.png.

4. / 6.выпрямление - искажение камеры

Я еще раз посмотрю на исправление, до сих пор я откладывал его, так как думал, что это не так важно.

7.3 сколько пикселейесли перекрытие между сегментами игнорируется (количество пикселей в группе)

Просто нарисуйте все линии из группы и проверьте ненулевое количество пикселей?

10.дорожки, как правило, не являются квадратичными - вместо этого смотрите int clothoids - это может перебить, поэтому вместо этого можно использовать полином 3-го порядка

Я понимаю вашу точку зрения.Клотоиды в настоящий момент находятся вне поля зрения, но я буду помнить о них.Как бы вы пошли с оценкой направления, если мы используем более сложную подгонку?В настоящее время мы просто берем первый коэффициент 2-го полинома Одера, чтобы оценить направление изгиба (и степень кривизны, чтобы различать кривые и прямые части).

необязательно более расширенный

Хороший вопрос, мы уже думали об усреднении результатов по нескольким кадрам.Я также держу это предложение в глубине души.

Прямое

straight

Слева

left

Проблемы

problems

1 Ответ

3 голосов
/ 27 мая 2019

Кажется, что ваша настоящая проблема - это этап фильтрации и подключения.поскольку вы отфильтровываете много горизонтальных компонентов, то для соединения нефильтрованных почти вертикальных линий остаются только неоптимальные сегменты.

Что с кривыми?они должны быть частью вашей модели Lane или нет?Поначалу я предполагаю, что нет, но это оказывает какое-то влияние только на этапе группировки.

Я бы предложил следующие шаги

  1. кроп
  2. двоичный файл (зачем тратить обработкувремя на бинаризацию частей изображения, которые обрезаются)
  3. canny (возможно, попробуйте вертикальный Sobel, чтобы получить только горизонтальные края)
  4. рассмотрите исправление, чтобы исправить искажение камеры
  5. HoughLinesP
  6. если вы решили отказаться от исправления входного изображения, то исправьте, по крайней мере, координаты выходных линий
    С точки зрения времени обработки это может быть более желательным вариантом - однако будет создан детектор жестких линийменее оптимальные результаты в зависимости от силы искажения вашей камеры
  7. соединяют линии независимо от их направления
    1. я бы сначала попробовал следующее
    2. для каждого сегмента вычислить линию (точку,направление)
    3. найти линии с похожими параметрами и проверить расстояние сегментаents
    4. если достаточно близко, сгруппируйте их в группу строк
    5. , в конце у вас должно быть несколько групп строк с некоторыми свойствами, которые вы можете рассчитать для оценки качества
      1. howсколько линий / сегментов принадлежит группе
      2. сколько пикселей принадлежит группе (сумма длин всех сегментов линии)
      3. сколько пикселей, если перекрытие между сегментами игнорируется (количество пикселей в группе)
      4. самый левый / самый правый пиксель в группе линий (некоторый сегмент сегмента группы)
      5. коэффициент заполнения (длина линии группы / количество пикселей в группе)
    6. после этой группировки сегменты линий и их присвоение группам больше не требуется, но я бы сохранил рассчитанные свойства.
  8. , если изгибы должны быть частью полосы движения, тоя бы попытался найти группы, которые продолжают найденные группы в конце и объединить их.
    Это должно предотвратить объединение пересекающихся линий.
  9. фильтрация групп по вашим потребностям
  10. fiчал.
    1. дорожки, как правило, не являются квадратичными
    2. вместо этого выглядят как клотоиды
    3. это может перебить, поэтому вместо них можно использовать полином 3-го порядка

необязательный, более продвинутый

  1. сохранить все группы в конце
  2. выполнять фильтрацию только на уровне вывода
  3. в следующем кадре совпадать со старыми группамипротив нового и сделайте некоторые отслеживания и проверки правдоподобия ваших моделей.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...