Я пишу приложение, которое может определять полосы движения в симуляторе вождения. Окружающая среда относительно проста, в основном это прямые многополосные дороги и почти нет кривизны. На данный момент я могу успешно обнаруживать линии, используя (классическое) преобразование Хафа, но проблема в том, что 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:
Я думаю, чтобы лучше выразить это, я ищу способ смоделировать дорожки, чтобы линии, которые не соответствуют модели, не включались. К сожалению, я понятия не имею, с чего начать с моделей. Какие-либо предложения?
Что бы это ни стоило, мне удалось определить полосы, по которым движется транспортное средство, и я могу исключить дополнительные линии, которые, так сказать, не являются частью «активной» полосы. Надеюсь это фото поможет
Это не идеально, но это что-то, я думаю. Моя конечная цель после моделирования — сгенерировать направление/положение транспортного средства. Но я просто хочу сначала получить относительно надежное обнаружение полосы движения. Я надеюсь, что существует относительно простой метод, который может помочь в этом (что-то, что не зависит от параметров системы, таких как фокусное расстояние поля зрения).