Обнаружение полосы движения в искусственной среде

Я пишу приложение, которое может определять полосы движения в симуляторе вождения. Окружающая среда относительно проста, в основном это прямые многополосные дороги и почти нет кривизны. На данный момент я могу успешно обнаруживать линии, используя (классическое) преобразование Хафа, но проблема в том, что HT, естественно, также обнаруживает линии, которые не являются дорожками.

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

Окружающая среда

Вот что я делаю до сих пор:

    1. Because the environment is more or less the same wherever I drive, I set the region of interest (RoI) to exclude the horizon and anything above it.
    2. Threshold the image (I'll explain my reason for threshold in a bit)
    3. Canny Edge Detection
    4. Apply a Hough Transform
    5. Draw the detected lines excluding those which have a gradient of 0.0 or nearly 0.0

Причина порогового изображения заключается в следующем. Если вы посмотрите на фотографию окружающей среды, указанную выше, вы увидите серую линию, идущую параллельно дороге. Поскольку это непрерывная линия — в отличие от разметки полосы движения — HT в конечном итоге обнаруживает ее. Я не могу исключить его на основе градиента, поскольку он имеет тот же градиент, что и маркеры дорожек. С пороговым значением я могу удалить это и, следовательно, обнаруживать только линии, которые являются фактическими маркерами полосы движения.

Вот результат вышеуказанных операций

Преобразование Хафа

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

ОБНОВЛЕНИЕ 1:

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

Что бы это ни стоило, мне удалось определить полосы, по которым движется транспортное средство, и я могу исключить дополнительные линии, которые, так сказать, не являются частью «активной» полосы. Надеюсь это фото поможет

Скриншот

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


person saad    schedule 22.11.2010    source источник


Ответы (2)


Один из способов — использовать предварительные знания о сцене, на которую вы смотрите. У вас может быть модель со скрытым состоянием, включающая более или менее статические параметры, такие как высота камеры, наклон камеры или ширина полосы движения, и динамические параметры, такие как рысканье камеры, боковое смещение камеры в пределах полосы движения, кривизна дороги и т. д. Вы может обрабатывать такую ​​модель в рамках фильтра Калмана. Преимуществом такой модели будет способность допускать другую разметку дорожного покрытия, такую ​​как стрелки направления, зебры и тому подобное. Удачи!

person ssegvic    schedule 22.11.2010
comment
К сожалению, я не могу узнать высоту камеры и другие параметры из симулятора вождения. Однако окружающая среда выглядит точно так же, как на фотографии выше, в 95% случаев. Стоит ли исследовать указанный метод? - person saad; 23.11.2010
comment
Если известно поле зрения камеры, можно определить наклон по координате точки схода y. Если вы знаете наклон (тангаж) и ширину полосы движения, вы можете определить высоту камеры. - person ssegvic; 23.11.2010
comment
Есть ли способ найти поле зрения эмпирически? Не зная фокусного расстояния. Проблема в том, что симулятор вождения не был запрограммирован мной и на самом деле полностью от другой компании. Хотя я попытаюсь спросить их о таких вещах, я не думаю, что ответы на такие вопросы будут в их списке приоритетов! - person saad; 23.11.2010
comment
я не думаю, что высота должна быть точной. если вы ок. ±6 (15 см) в пределах фактического значения, вы должны быть в пределах 5% погрешности при расчете ширины полосы движения с использованием этого метода. - person Greg Buehler; 23.11.2010
comment
Любые другие методы, которые вы могли бы предложить? Как насчет чего-то, основанного на сплайнах/активных контурах, что-то, что не требует параметров? Я говорю это, потому что довольно давно читал о фильтрах Калмана и просто не могу их понять. Извините, что так толсто :( - person saad; 23.11.2010
comment
Трудно предложить решение, когда мы не знаем, в чем заключаются ваши проблемы. Принесите нам пример из практики, который показывает, почему вы не удовлетворены методом, который используете в настоящее время. - person ssegvic; 23.11.2010
comment
В настоящее время я не использую никакую систему обнаружения полосы движения. Я пытаюсь реализовать его в вышеупомянутой среде. Поскольку среда относительно проста, я надеялся, что смогу использовать простую/легкую для понимания технику, которую я мог бы затем реализовать, а затем продвинуться дальше. Основное требование состоит в том, что он должен быть в состоянии обрабатывать плавные повороты и прямые полосы и, возможно, определять направление движения транспортного средства. Как уже было сказано, я очень мало знаю об окружающей среде, над которой работаю, и поэтому не могу найти такие параметры, как фокусное расстояние и поле зрения камеры. - person saad; 24.11.2010
comment
@ssegvic Привет, не могли бы вы пролить больше света на то, как определить и использовать модель? В настоящее время я пытаюсь обнаружить полосы в видео в реальной среде. - person Autonomous; 13.11.2013

Возможно, вы могли бы попытаться найти только линии на краях, найденных на переходах серого-белого, а не на всех краях всего изображения?

person jilles de wit    schedule 23.11.2010
comment
Вот что я придумал. Не знаю, насколько это элегантно. Я собираюсь установить широкую (но короткую по высоте) область интереса (RoI) на изображении. Он будет расположен примерно на 3/5 пути вниз. Если и только если линия пересекает нижнюю часть этой области интереса, я нарисую ее. Если вы посмотрите на это изображение: tinyurl.com/349hscq (выбор = RoI), вы увидите что только границы полосы движения, в пределах которой движется транспортное средство, будут пересекать нижнюю часть выделения, и, следовательно, я могу пометить их как полосы и нарисовать их соответствующим образом. Я знаю, что это не будет работать во всех случаях, но я хотел запустить его здесь. - person saad; 23.11.2010
comment
звучит разумно. В практическом компьютерном зрении работает все, что работает. Приберегите компьютерную или статистическую ясность или точность, когда у вас есть что-то, что делает что-то. - person jilles de wit; 24.11.2010